【问题标题】:Set text size in .xml or programmatically在 .xml 或以编程方式设置文本大小
【发布时间】:2013-10-30 02:02:17
【问题描述】:

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

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

【问题讨论】:

  • 使用getDimensionPixelSize()
  • @323go 我在我的 HTC One S 上进行了测试。getDimensionPixelSize() 和 getDimension() 之间没有区别 =/
  • 您确实意识到sp = 缩放像素,它将根据屏幕指标和文本缩放因子进行调整,对吧?如果你想让它们看起来一样,你需要使用dp
  • @323go 为什么相同的维度如果以编程方式设置(与 .xml 设置相比)看起来会不同?
  • 因为您使用了错误的setTextSize() 方法。您正在使用的那个需要缩放像素,而您正在提供像素。改为这样做:setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );

标签: android dimensions


【解决方案1】:

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

setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );

【讨论】:

    【解决方案2】:
    tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));
    

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

    【讨论】:

    • 它看起来仍然与 .xml 中的设置不同。或者我应该以编程方式设置所有视图的所有大小以使其没有区别?
    【解决方案3】:

    我目前有同样的事情。确实在 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) 与 Note 4 (5.0.1) 下以编程方式设置文本大小会导致完全不同的结果 -.-

    【讨论】:

      猜你喜欢
      • 2012-09-08
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2013-01-10
      • 2012-09-15
      相关资源
      最近更新 更多