我在dimens.xml上有变量
<resources>
<dimen name="btn_text_size">12sp</dimen>
</resources>
我可以在布局文件中使用它:
<TextView
android:textSize="@dimen/btn_text_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_tags_complete"
/>
或以编程方式
tagButton.setTextSize(c.getResources().getDimension(R.dimen.tag_text_size));
但是这2种方法给出了不同的结果。我知道getDimension
基于与资源相关联的当前DisplayMetrics。
但是我应该怎样做才能使这两种方式看起来一样?
答案 0 :(得分:35)
setTextSize( float )
需要缩放的像素值。因此,setTextSize( 12 )
会为您提供所需的结果。但是,getDimension()
和getDimensionPixelSize()
会以像素为单位返回大小,因此您需要使用setTextSize()
的单位类型变体,如下所示:
setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );
答案 1 :(得分:3)
tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));
这会工作得很好:) 你还应该记住textView有一个setTextSize(int unit,float size),在从代码设置大小时应该使用它,而不是从xml dimen设置大小。
答案 2 :(得分:0)
我目前有同样的事情。在dimens.xml中设置了一个维度并以编程方式应用它,这是通过xml设置时的3倍。
我也查了一下:
TextView.getTextSize() = 92f
getResources().getDimension(R.dimen ...) = 92f
TextView.setTextSize(92)!= TextView的大小来自XML,其他标志如TypedValue.COMPLEX_UNIT_PX使它更大。
默认的setTextSize默认情况下会应用COMPLEX_UNIT_SP btw。所以再一次,Android API是不一致的,所以只能以编程方式设置并调整大小,以便它们适合,这将是我的解决方案。
编辑:在Galaxy Note 2(4.4.2)与Note 4(5.0.1)下以编程方式设置文本大小会导致完全不同的结果 - .-