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?
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);
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
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);
si vous utilisez la ressource Integer, vous devez prendre R.Integer.votre valeur comme ceci
int value=(int) contextG.getResources()
.getDimension(R.integer.myvalue);