Android XML定义的维度值产生意外结果

我在我的XML文件中定义了一个dp维度,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="custom_button_Margin">10dp</dimen>
</resources>

我的想法是使用这些值来设置元素之间的填充.当我在布局XML文件中使用该值时,这可以正常工作.

片段:

<RelativeLayout
    android:id="@+id/mainButtons"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.4"
    android:layout_margin = "5dp"

    android:gravity="right|bottom">
    <Button
        android:id="@+id/_7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/seven"

        android:background = "@drawable/custom_button"
        android:typeface="monospace"
        android:textSize="@dimen/custom_button_TextSize"

        android:layout_marginRight = "@dimen/custom_button_Margin"
        android:layout_marginBottom = "@dimen/custom_button_Margin"
    />
</RelativeLayout>

问题在于我尝试以编程方式获取此值.我希望得到一个已经缩放以匹配屏幕密度的值.然后,我要做的就是按照找到的公式here(页面很长,看看转换dp单位到像素单位)

我将公式包装在一个函数中,该函数检索文件中定义的值,并将其缩放为像素.

private int get_custom_button_PadV()
    {
    final float scale = getResources().getdisplayMetrics().density;

    return (int) (R.dimen.custom_button_Margin * scale + 0.5f);
    }

当我观察代码时,我看到以下值

scale = 1.0
R.dimen.custom_button_Margin = 2131099650

我无法弄清楚为什么custom_button_Margin值如此之大……我希望它的标度为1.0,那么值为10.我缺少什么?

解决方法:

您正在使用维度ID作为维度值.试试这个:

private int get_custom_button_PadV() {
    final Resources res = getResources();
    final float scale = res.getdisplayMetrics().density;
    return (int) (res.getDimension(R.dimen.custom_button_Margin) * scale + 0.5f);
}

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念