2012-04-19 64 views
31

我已阅读this,发现如何在Java类中访问整数资源,但是如何访问其他资源中的文档。在xml中访问整数资源

这是资源在试图访问input_field_padding中的EditText RES /价值/ integers.xml

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

<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 

是否有可能访问它在另一个资源文件还是我失去了一些东西?

回答

35

最后,我能够访问Java代码中的整数资源和整数值作为DIMM在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); 
+4

这个答案是错误的。取决于用例,错误。请参阅下面的答案。 – 2013-04-14 18:03:06

+1

你已经创建了整数,这不是非法的,但是非标准的,但是你永远不会使用它。您只使用您创建的具有与整数相同名称的维。这至少是不好的做法。 – dm78 2013-12-18 22:28:05

+0

@DavidMays是的,评论栏不是非法的,它适用于我。根据你的建议,我更新了它。 – Rafiq 2013-12-21 09:19:43

10

接受的答案是完全错误引导。除非存在特定的唯一原因,否则不应使用整数资源来设置填充大小。不仅在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。除非您想在运行时将其更改为不同的值。

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

+0

你的第二行不应该是'''R.dimen.input_field_padding'''吗? – tir38 2013-11-28 02:27:28

+0

糟糕。错过了调整,当我复制/粘贴。感谢名单! – 2013-11-29 16:47:08

+0

这使得我的填充比我刚刚在xml中直接创建视图更小。为什么? – Elliptica 2017-08-30 17:08:06

2

如果你正在服用整数资源,那么你必须要像R.Integer.yourintvalue这样

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

,你也可以把它定义这方式:

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

Format = enclo唱数据类型:

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

类型=资源类型(带R.XXXXX.name参考):

颜色 扪 字符串 风格 等...

访问这样的:

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

我可以使用任何我想要的类型或有一组可能的字符串吗? – NikkyD 2014-05-26 19:02:08

+1

颜色,尺寸,字符串,样式等 – Arash 2014-05-26 19:45:15

-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

+0

同意,这是正确的做法。作为参考,我的'integer_name'值是在'values/integers.xml'中,如下所示:' 42' – VinceFior 2014-07-25 18:22:51

+2

直接使用'R.integer.integer_name'是错误的!它只保存整数的“资源ID”。你应该使用'getResources().getInteger(R.integer.SPLASH_SCREEN_DELAY)''在Arash的回答中提到(http://stackoverflow.com/a/23267383/4718314) – 2015-09-28 07:17:17