Accessing integer resources in xml

30,898

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

Solution 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

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

Solution 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);
Share:
30,898
Rafiq
Author by

Rafiq

Updated on April 11, 2020

Comments

  • Rafiq
    Rafiq over 3 years

    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?