以.xml或以编程方式设置文本大小

时间:2013-10-21 14:12:15

标签: android dimensions

我在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。

但是我应该怎样做才能使这两种方式看起来一样?

3 个答案:

答案 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)下以编程方式设置文本大小会导致完全不同的结果 - .-

相关问题