如何访问Android Studio R.dimen值?

时间:2015-07-16 17:27:48

标签: android

我有两个密切相关的问题。

values\dimens.xml我有:

<dimen name     ="small_flag_height">    72sp   </dimen>

在代码中我有:

    /* a */ int resId = R.dimen.small_flag_height;

今天的某个时刻,上面的赋值语句显示如下:

    int resId = 72sp;  

当我徘徊而不是72sp时,R.dimen.small_flag_height会显示在弹出消息中;

当我点击 72sp时,语句已更改为上面显示的/* a */

(a)如何让AS再次显示该值? (我不知道如何让它首先显示它的价值。)

编辑如果我关闭文件并重新打开,则会再次显示72sp。我怎么能这样做?

以下声明仅显示int的{​​{1}}分配R.dimen.small_flag_height,恰好为2131099648

    Log.w("resId","" + resId);

(b)我需要做些什么才能获得分配给72spsmall_flag_height)? (我不想显示它,我想在计算中使用它。)

2 个答案:

答案 0 :(得分:2)

getResources().getDimension(R.dimen.small_flag_height);会为您提供以像素为单位的尺寸,而不是逢低。您需要将像素转换为倾角才能完成计算。

点击此处查看如何将像素转换回逢低:Android - pixels to dips

这个答案应该有效:

public int getDip(int pixel)
{
        float scale = getBaseContext().getResources().getDisplayMetrics().density;
        return (int) (pixel * scale + 0.5f);
 }

答案 1 :(得分:0)

这回答上述(b):

 getResources().getDimension(R.dimen.small_flag_height);

但是,结果是{em>不以sp为单位返回 - 即,不是72sp72,而是159.75002,以及我不确定那些单位是什么......

编辑 getDimension的每个文档:"Unit conversions are based on the current DisplayMetrics associated with the resources."

(a)在上面的评论中得到回答。