31

我读过这篇文章,发现如何访问 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

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

4

6 回答 6

34

最后,我能够访问 java 代码中的整数资源和 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);
于 2012-07-10T04:52:39.800 回答
10

接受的答案完全是错误的。除非有特定的独特原因,否则您永远不应使用 Integer 资源来设置填充大小。不仅在 XML 中,而且在代码中。这就是为什么您经历了UnsupportedOperationException. 整数资源不会根据屏幕的 DPI 进行缩放。这意味着您不会为所有设备获得一致的间隔填充。帝门资源会自动为你调整价值。您的 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 布局的
密度独立性

于 2013-04-14T17:57:16.957 回答
4

您也可以这样定义:

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

格式 = 封闭数据类型:

float boolean fraction integer ... 和 type 代表:

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

颜色尺寸字符串样式等...

像这样访问它:

Resources res = getResources();
int i= res.getInteger(R.dimen.int_value);
于 2014-04-24T11:18:10.873 回答
2

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

int value=(int) contextG.getResources()
            .getDimension(R.integer.myvalue);
于 2014-01-10T05:34:53.970 回答
-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

于 2014-05-17T08:12:14.033 回答
-1
 <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"

android:text="@integer/imageSelectLimit"

       android:textColor="@color/colorPrimary"
       android:textSize="@dimen/textSize"/>
于 2018-04-11T09:28:27.690 回答