Home » Android » android – Accessing integer resources in xml

android – Accessing integer resources in xml

Posted by: admin April 23, 2020 Leave a comment

Questions:

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?

How to&Answers:

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

Answer:

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

Answer:

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

Answer:

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

Answer:

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 .

Answer:

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

android:text=”@integer/imageSelectLimit”

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