Подтвердить что ты не робот

Доступ к целым ресурсам в xml

Я прочитал this, где нашел, что как обращаться к целым ресурсам в классе java, но не к документам для другого ресурса.

Вот ресурсы в res/values ​​/integers.xml

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

Пытался получить доступ к input_field_padding в EditText.

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

Но я получил следующее исключение

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

Можно ли получить доступ к нему в другом файле ресурсов или мне что-то не хватает?

4b9b3361

Ответ 1

Наконец, я могу получить доступ к целочисленному ресурсу в java-коде и целочисленном значении как dimen в xml.

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

В файле xml: -

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

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

Ответ 2

Принятый ответ полностью неверен. Если не существует конкретной уникальной причины, вы никогда не должны использовать ресурс Integer для установки размеров заполнения. Не только в XML, но и в коде. Вот почему вы столкнулись с UnsupportedOperationException. Целочисленные ресурсы не масштабируются на основе DPI экранов. Это означает, что вы не получите последовательно разнесенное дополнение для всех устройств. Ресурсы Dimen автоматически изменят свое значение для вас. Ваш код Java должен выглядеть следующим образом:

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

Что, кстати, нет необходимости устанавливать дополнение элемента EditText в коде, если вы уже установили его в XML. Если вы не захотите изменить его на другое значение во время выполнения.

Подробнее здесь:
Независимость плотности
Работа с XML-макетами

Ответ 3

Также вы можете определить это так:

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

Формат = прилагаемый тип данных:

поплавок логический доля целое число ... и тип означает:

Тип = тип ресурса (ссылка на R.XXXXX.name):

цвет DIMEN строка стиль и т.д...

Доступ к этому нравится:

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

Ответ 4

если вы берете ресурс Integer, тогда вам нужно взять R.Integer.yourintvalue таким образом

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

Ответ 5

Правильный способ доступа к целочисленному полю использует @integer/input_field_padding

В XML

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

В JAVA

R.integer.integer_name

Обратитесь к http://developer.android.com/guide/topics/resources/more-resources.html#Integer.