TypedValue.applyDimension产生错误的尺寸

时间:2020-02-23 18:49:13

标签: android android-layout textview text-size android-screen

我使用TypedValue.applyDimension和displayMetrix.scaledDensity在我的Xiaomi Redmi 5 plus上的TextView中设置文本大小,并得到令人惊讶的结果:TextView中的文本比布局属性中设置的文本大得多(相同的sp值)。这是我的布局:

<TextView
    android:id="@+id/my_text_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center|start"
    android:layout_margin="4dp"
    android:text="Some Text"
    android:textSize="18sp" />

这是我更改文字大小的方法:

TextView titleView = itemView.findViewById(R.id.my_text_view);
titleView.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18, 
        getResources().getDisplayMetrics()));

我也尝试如下使用公式:

(int) getResources().getDisplayMetrics().scaledDensity * 18

在模拟器上,我得到了正确的文本大小,因此我不确定如何重现该文本大小。如果有人设法做到这一点,请给我和其他人留下评论,以了解实际的错误所在。 谢谢

1 个答案:

答案 0 :(得分:0)

因此,我打开TextView source code,发现TextView.setTextSize接受sp,而不接受px。因此,答案不是将sp转换为px,而是默认使用sp,或者,如果需要支持多个大小单位,请使用 setTextSize(int unit,float size)