【问题标题】:Accessing integer resources in xml访问 xml 中的整数资源
【发布时间】:2012-04-19 14:15:28
【问题描述】:

我已阅读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

是否可以在另一个资源文件中访问它还是我遗漏了什么?

【问题讨论】:

    标签: android android-layout android-resources


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
       <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
      

      android:text="@integer/imageSelectLimit"

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

      【讨论】:

        【解决方案3】:

        我终于可以在 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);
        

        【讨论】:

        • 这个答案是错误的。并且根据用例,错误。请在下面查看我的答案。
        • 你已经创建了整数,这不是非法的,但是是非标准的,但是你永远不会使用它。您只使用了与整数同名的维度。至少这是不好的做法。
        • @DavidMays 是的,注释行不是非法的,它对我有用。根据你的建议我更新了它。
        • 您必须在 XML 中使用它,例如:@integer/input_field_padding
        • 我很惊讶为什么有这么多的赞成票,事实上,你使用的是一个维度而不是整数。
        【解决方案4】:

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

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

        在此处阅读更多信息:
        Density Independence
        Working with XML Layouts

        【讨论】:

        • 你的第二行不应该是R.dimen.input_field_padding 吗?
        • 糟糕。当我复制/粘贴时错过了调整。谢谢!
        • 与我直接在 xml 中创建视图相比,这使我的填充更小。为什么?
        【解决方案5】:

        你也可以这样定义:

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

        【讨论】:

        • 我可以使用任何我想要的类型还是有一组可能的字符串?
        • 颜色、尺寸、字符串、样式等
        【解决方案6】:

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

        【讨论】:

        • 同意,这是正确的做法。作为参考,我的 integer_name 值在 values/integers.xml 中,如下所示:&lt;integer name="integer_name"&gt;42&lt;/integer&gt;
        • 直接使用R.integer.integer_name是错误的!它只保存整数的resource id。你应该使用getResources().getInteger(R.integer.SPLASH_SCREEN_DELAY),正如阿拉什的回答(stackoverflow.com/a/23267383/4718314)中提到的那样
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 2020-01-31
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        相关资源
        最近更新 更多