将像素转换为sp
我需要以sp
单位显示TextView
的当前TextSize
。
但getTextSize()
以pixels
返回大小。 那么有没有办法convert pixels to sp
?
请参阅DisplayMetrics类,其中包含用于densityDpi
和scaledDensity
字段。
用法示例:
float sp = px / getResources().getDisplayMetrics().scaledDensity;
用这个
public static float pixelsToSp(Context context, float px) { float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity; return px/scaledDensity; }
如果你想testing这个方法是否正常工作,请使用这个代码片段
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的字体大小应该是相同的。
奇怪的是看到在运行时调整的公共领域,但它的工作原理。 标准的Dpi是160,所以无论你的设备Dpi是240,密度和缩放密度都会显示240/160 = 1.5这就是你如何在像素和sp之间进行转换:px = 1.5 * sp