【发布时间】:2011-09-09 22:23:03
【问题描述】:
我需要TextView 中的当前TextSize,以sp 为单位。
但是getTextSize() 返回pixels 中的大小。那么有没有办法convert pixels to sp?
【问题讨论】:
-
有关
DP -> PX、PX -> DP、SP to PX和PX to SP的转化,另请参见this answer。
我需要TextView 中的当前TextSize,以sp 为单位。
但是getTextSize() 返回pixels 中的大小。那么有没有办法convert pixels to sp?
【问题讨论】:
DP -> PX、PX -> DP、SP to PX 和PX to SP 的转化,另请参见this answer。
使用这个
public static float pixelsToSp(Context context, float px) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return px/scaledDensity;
}
如果你想测试这个方法是否正确,请使用这个 sn-p
XML
<TextView
android:id="@+id/txtHelloWorld"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
<TextView
android:id="@+id/txtHelloWorld2"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Java
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
TextView helloWorldTextView = (TextView) rootView.findViewById(R.id.txtHelloWorld);
TextView helloWorldTextView2 = (TextView) rootView.findViewById(R.id.txtHelloWorld2);
helloWorldTextView2.setTextSize(pixelsToSp(getActivity(), helloWorldTextView.getTextSize()));
两个TextView的字体大小应该相同。
【讨论】:
查看DisplayMetrics 类,它包含densityDpi 和scaledDensity 的字段。
示例用法:
float sp = px / getResources().getDisplayMetrics().scaledDensity;
【讨论】:
DisplayMetrics 类有 fields densityDpi 和 scaledDensity,而不是方法。对于缩放,人们会想要使用density 字段而不是densityDpi。
奇怪的是看到在运行时调整的公共字段但它有效。标准 Dpi 是 160,所以无论您的设备 Dpi 是什么,比如说 240,密度和 scaledDensity 都将显示 240/160=1.5 这是您在像素和 sp 之间转换的方式:px=1.5*sp
【讨论】: