我使用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
在模拟器上,我得到了正确的文本大小,因此我不确定如何重现该文本大小。如果有人设法做到这一点,请给我和其他人留下评论,以了解实际的错误所在。 谢谢
答案 0 :(得分:0)
因此,我打开TextView source code,发现TextView.setTextSize接受sp,而不接受px。因此,答案不是将sp转换为px,而是默认使用sp,或者,如果需要支持多个大小单位,请使用 setTextSize(int unit,float size)