【问题标题】:Why is the dimen resource inconsistent and how to get the correct value?为什么dimen资源不一致以及如何获取正确的值?
【发布时间】:2015-10-17 15:37:45
【问题描述】:

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

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

我在我的 xml 和 Java 代码中都使用它来创建一个 Button 和一个 TextView,其文本大小为 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));

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

【问题讨论】:

    标签: java android android-xml text-size


    【解决方案1】:

    试试这个

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

    最好根据 android 文档使用 sp("scaled pixel") 作为文本大小 http://developer.android.com/intl/es/reference/android/widget/Button.html

    【讨论】:

    • 再问一个问题,如果我使用sp,我可以使用我的问题中的方法吗?我的意思是 setTextSize(float) 重载。
    • 是的,您可以使用 setTextSize 方法,或者您还想问什么?
    【解决方案2】:

    使用dp or dip 而不是pt

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

    【讨论】:

    【解决方案3】:

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

    另一方面

    pt:Points - 1/72 英寸,基于屏幕的物理尺寸。


    px:像素 - 对应于屏幕上的实际像素。本单位 不建议测量,因为实际表示可能会有所不同 跨设备;

    所以 pt 和 px 会因屏幕而异而 dp**/dip 将根据屏幕进行管理。**..如果您希望在不同屏幕上保持一致的大小而不是 dp/dip

    有关尺寸的更多信息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));
    

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2016-11-18
      • 2022-01-06
      • 2020-09-21
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多