web-dev-qa-db-fra.com

Accès aux ressources entières en xml

J'ai lu this où a trouvé comment accéder aux ressources entières dans la classe Java mais pas de documentation pour une autre ressource).

Voici les ressources à res/values ​​/ integers.xml

<resources>
     <integer name="input_field_padding" >5</integer>
</resources>

J'ai essayé d'accéder à input_field_padding dans EditText.

<EditText
        Android:id="@+id/user_name"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"    
        Android:padding="@integer/input_field_padding" />

Mais j'ai eu l'exception suivante

Java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x10

Est-il possible d'y accéder dans un autre fichier de ressources ou manque-t-il quelque chose?

31
Rafiq

Enfin, je suis en mesure d'accéder aux ressources entières en Java et valeur entière en dimen en xml.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="input_field_padding">20dip</dimen>
    <integer name="input_field_padding">20</integer>
</resources>

Dans le fichier xml: -

<EditText
    Android:id="@+id/user_name"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"    
    Android:padding="@dimen/input_field_padding" /> 

Dans Java: -

EditText mUsername = (EditText) this.findViewById(R.id.user_name);
//int padding = this.getResources().getInteger(R.integer.input_field_padding);
int padding = (int) this.getResources().getDimension(R.dimen.input_field_padding);
mUsername.setPadding(padding, padding, padding, padding);
35
Rafiq

La réponse acceptée est complètement erronée. Sauf s'il existe une raison unique spécifique, vous ne devez jamais utiliser une ressource entière pour définir les tailles de remplissage. Non seulement en XML mais aussi en code. C'est pourquoi vous avez rencontré un UnsupportedOperationException. Les ressources entières ne sont pas mises à l'échelle en fonction du DPI des écrans. Ce qui signifie que vous n'obtiendrez pas de rembourrage régulièrement espacé pour tous les appareils. Les ressources Dimen ajusteront automatiquement leur valeur pour vous. Votre code Java devrait ressembler à ceci:

EditText mUsername = (EditText) this.findViewById(R.id.user_name);
int padding = (int) this.getResources().getDimension(R.dimen.input_field_padding);
mUsername.setPadding(padding, padding, padding, padding);

Ce qui, au fait, il n'est pas nécessaire de définir le remplissage de l'élément EditText dans le code si vous l'avez déjà défini dans le XML. À moins que vous ne vouliez la changer en une valeur différente au moment de l'exécution.

En savoir plus ici:
Indépendance de densité
tilisation des dispositions XML

10
Jay Soyer

Vous pouvez également le définir de cette façon:

<resources>
<item name="text_line_spacing" format="integer" type="dimen">10</item>
</resources>

Format = type de données englobant:

float boolean fraction integer ... et type signifie:

Type = type de ressource (référencé avec R.XXXXX.name):

couleur dimen string style etc ...

Accédez-y comme ceci:

Resources res = getResources();
int i= res.getInteger(R.dimen.int_value);
4
Arash

si vous utilisez la ressource Integer, vous devez prendre R.Integer.votre valeur comme ceci

int value=(int) contextG.getResources()
            .getDimension(R.integer.myvalue);
2
Sydroid