19

我在 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));

但这两种方法给出了不同的结果。我知道这getDimension是基于与资源关联的当前 DisplayMetrics。

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

4

3 回答 3

37

setTextSize( float )需要一个缩放的像素值。所以,setTextSize( 12 )会给你想要的结果。但是,getDimension()getDimensionPixelSize()以像素为单位返回大小,因此您需要使用以下单位类型的变体setTextSize()

setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );
于 2013-10-21T14:47:19.213 回答
3
tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));

这会很好:) 你还应该记住 textView 有一个 setTextSize(int unit,float size),应该在从代码设置大小而不是从 xml 维度设置大小时使用它。

于 2013-10-21T14:29:15.217 回答
0

我目前有同样的事情。确实在dimens.xml 中设置了一个维度并以编程方式应用它,这是通过xml 设置时的3 倍。

我还检查了:

TextView.getTextSize() = 92f
getResources().getDimension(R.dimen ...) = 92f

TextView.setTextSize(92) != 大小来自 XML 的 TextView,其他标志如 TypedValue.COMPLEX_UNIT_PX 使它更大。

默认情况下,默认 setTextSize 确实应用 COMPLEX_UNIT_SP 顺便说一句。所以再一次,Android API 是不一致的,所以仅以编程方式设置并调整大小,使其适合,将是我的解决方案。

编辑:在 Galaxy Note 2 (4.4.2) vs Note 4 (5.0.1) 下以编程方式设置文本大小会导致完全不同的结果-.-

于 2015-04-21T11:56:08.623 回答