Accessing integer resources in xml

大憨熊 提交于 2019-12-03 06:36:25

问题


I have read this where found that how to access integer resources in java class but no docs for another resource.

Here is Resources at res/values/integers.xml

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

Tried to access the input_field_padding in EditText.

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

But I got the following exception

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

Is it possible to access it in another resources file or am I missing something?


回答1:


Finally I am able to access integer resource in java code and integer value as dimen in xml.

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

In xml file:-

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

In java file:-

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);



回答2:


The accepted answer is completely mis-guiding. Unless there is a specific unique reason, you should never use an Integer resource for setting padding sizes. Not only in XML but also in code. This is why you experienced an UnsupportedOperationException. Integer resources are not scaled based on the DPI of screens. Which means you will not get consistently spaced padding for all devices. Dimen resources will automatically adjust their value for you. Your java code should look like this:

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);

Which, btw, there's no need to set the padding of the EditText element in code if you already set it in the XML. Unless you wanted to change it to a different value at run time.

Read more here:
Density Independence
Working with XML Layouts




回答3:


Also You Can Define It This Way :

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

Format = enclosing data type:

float boolean fraction integer ... and type stands for:

Type = resource type (referenced with R.XXXXX.name):

color dimen string style etc...

Access It Like This :

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



回答4:


if you are taking Integer resource then you have to take R.Integer.yourintvalue like this way

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



回答5:


The correct way to access an integer field is using @integer/input_field_padding

In XML

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

In JAVA

R.integer.integer_name

Refer this http://developer.android.com/guide/topics/resources/more-resources.html#Integer .




回答6:


 <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"

android:text="@integer/imageSelectLimit"

       android:textColor="@color/colorPrimary"
       android:textSize="@dimen/textSize"/>


来源:https://stackoverflow.com/questions/10230026/accessing-integer-resources-in-xml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!