访问xml中的整数资源

Raf*_*fiq 31 android android-layout android-resources

我看了这个地方发现了如何在Java类访问整数资源,但对另一资源没有文档.

这是res/values/integers.xml中的Resources

<resources>
     <integer name="input_field_padding" >5</integer>
</resources>
Run Code Online (Sandbox Code Playgroud)

试图访问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" />
Run Code Online (Sandbox Code Playgroud)

但我得到以下例外

java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x10
Run Code Online (Sandbox Code Playgroud)

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

Raf*_*fiq 34

最后,我能够访问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>
Run Code Online (Sandbox Code Playgroud)

在xml文件中: -

<EditText
    android:id="@+id/user_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"    
    android:padding="@dimen/input_field_padding" /> 
Run Code Online (Sandbox Code Playgroud)

在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);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是错误的指导.并根据用例,错误.请参阅下面的答案. (4认同)
  • 您已经创建了一个整数,它不是非法的,但不是标准的,但是您永远不会使用它。您只使用了与该整数同名的二维。至少这是一个坏习惯。 (2认同)

Jay*_*yer 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);
Run Code Online (Sandbox Code Playgroud)

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

阅读更多内容:
密度独立
使用XML布局