我正在使用此函数从我的dimens.xml文件中获取一个维度:
public static float getDimen(Context context, String name)
{
Assert.assertNotNull(context);
Assert.assertNotNull(name);
Resources res = context.getResources();
int dimensionID = res.getIdentifier(name, "dimen", context.getPackageName());
return res.getDimension(dimensionID);
}
这类似于:getDimen(mContext, "textsize_small")
并检索“R.dimen.textsize_small”值(或至少它应该)。
<resources>
<dimen name="textsize_small">10dp</dimen>
<dimen name="textsize_medium">13dp</dimen>
<dimen name="textsize_large">15dp</dimen>
<dimen name="textsize_xlarge">17dp</dimen>
</resources>
因此,在使用此值后,我使用它来设置TextView的TextSize:
float textsize = getDimen(mContext, "textsize_" + object.getDesiredSize);
textview.setTextSize(textsize);
Log.d(TAG, "TextSize: " + textview.getTextSize());
编辑:
我设置了android:textSize="@dimen/textsize_small"
并使用了getDimen(mContext, "textsize_small")
。在第一个中,Log.d返回 15.0 ,在第二个中返回 22.5
是否缺少任何类型转换?
答案 0 :(得分:4)
答案是对的。您正在xhdpi设备上运行(名义上为360像素/英寸),并且您已将值定义为 dp
。所以10dp是22.5像素(10 * 360/160-其中160是dp值被缩放的默认像素密度)。换句话说,屏幕上22.5像素的物理尺寸与mdpi(160像素/英寸)屏幕上的10像素相同。
看起来您正在应用两次dp-to-pixels转换。在hdpi设备上,比率是1.5,你得到的平方(1.5 2 * 10 = 22.5)。这是因为您致电setTextSize(textsize)
。来自the docs:
将默认文本大小设置为给定值,解释为“缩放像素”单位。此大小根据当前密度和用户字体大小首选项进行调整。
尝试使用:
textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize);