我有两个密切相关的问题。
在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)我需要做些什么才能获得分配给72sp
的值(small_flag_height
)? (我不想显示它,我想在计算中使用它。)
答案 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
为单位返回 - 即,不是72sp
或72
,而是159.75002
,以及我不确定那些单位是什么......
编辑 getDimension
的每个文档:"Unit conversions are based on the current DisplayMetrics associated with the resources."
(a)在上面的评论中得到回答。