访问xml中的整数资源

时间:2012-04-19 14:15:28

标签: android android-layout android-resources

我已阅读this,其中发现如何访问java类中的整数资源,但没有其他资源的文档。

这是资源在res / values / integers.xml

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

尝试访问EditText中的input_field_padding。

<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

是否可以在另一个资源文件中访问它,或者我错过了什么?

6 个答案:

答案 0 :(得分:35)

最后,我能够访问java代码中的整数资源,并将整数值作为xml中的dimen。

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

答案 1 :(得分:10)

接受的答案完全是误导。除非有特定的唯一原因,否则不应使用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);

其中,顺便说一下,如果您已经在XML中设置了EditText元素,则无需在代码中设置{{1}}元素的填充。除非您想在运行时将其更改为其他值。

在这里阅读更多:
Density Independence
Working with XML Layouts

答案 2 :(得分:4)

你也可以这样定义:

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

格式=封闭数据类型:

浮 布尔 分数 整数 ... 和类型代表:

Type =资源类型(以R.XXXXX.name引用):

颜色 地扪 串 样式 等...

像这样访问:

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

答案 3 :(得分:2)

如果您正在使用Integer资源,那么您必须像这样采用R.Integer.yourintvalue

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

答案 4 :(得分:-1)

访问整数字段的正确方法是使用@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

答案 5 :(得分:-1)

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

机器人:文本= “@整数/ imageSelectLimit”

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