为什么维度资源不一致以及如何获得正确的值?

时间:2015-10-17 07:18:31

标签: java android android-xml text-size

我正在编写Android应用。我基本上创建了以下dimen资源:

<dimen name="button_text_size">11pt</dimen>

我在我的xml和Java代码中使用它来创建ButtonTextView,文本大小为11pt。我是这样做的:

XML

    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:textSize="@dimen/button_text_size"
        android:text="secret!"
        android:layout_margin="@dimen/button_margin"
        android:background="secret!"
        android:layout_weight="1"
        android:onClick="secret!"/>

Java代码

TextView text = new TextView (this);
        text.setLayoutParams (new LinearLayout.LayoutParams (0, ViewGroup.LayoutParams.WRAP_CONTENT, 3));
        text.setText (secret);
        text.setTextSize (getResources().getDimension (R.dimen.button_text_size));

理论上,两个视图的文本应该是相同的大小。但文本视图的文本大小似乎更大!我不知道为什么会这样。我想这是因为单位的一些问题,但实际发生了什么?如何获得正确的值?

3 个答案:

答案 0 :(得分:2)

试试这个

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.button_text_size));

最好根据android文档使用sp(&#34;缩放像素&#34;)作为文本大小 http://developer.android.com/intl/es/reference/android/widget/Button.html

答案 1 :(得分:1)

使用dp or dip代替pt

 <dimen name="button_text_size">11dp</dimen>

答案 2 :(得分:0)

  

dp / dip:与密度无关的像素 - 基于的抽象单位   屏幕的物理密度。这些单位相对于160 dpi   (每英寸点数)屏幕,1dp大致等于1px。什么时候   在更高密度的屏幕上运行,用于绘制的像素数   1dp按照适合屏幕dpi的因子放大。   同样,在较低密度屏幕上时,使用的像素数   1dp按比例缩小。

另一方面

  

点数:点数 - 基于屏幕物理尺寸的1/72英寸。


  

px:Pixels - 对应于屏幕上的实际像素。这个单位   不推荐使用度量,因为实际表示可能会有所不同   跨设备;

所以 pt和px会因屏幕而异,而dp ** / dip会根据屏幕进行管理。** ..如果你想在不同的屏幕上保持一致的尺寸而不是dp / dip

有关DIMENSIONS的更多信息refer
因此,在XML中从11pt变为11dp会有所帮助
但动态地将它视为px的浮动值...所以请按照

中的pavan提供解决方案
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.button_text_size));

请选择以下某个值。

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP,getResources().getDimension(R.dimen.button_text_size));

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,getResources().getDimension(R.dimen.button_text_size));