将像素转换为sp
请参阅DisplayMetrics类,它的字段为densityDpi
和scaledDensity
。
用法示例:
float sp = px/getResources().getDisplayMetrics().scaledDensity;
只是为了澄清:'DisplayMetrics'类具有_fields_' densityDpi'和'scaledDensity',而不是方法。而对于缩放,人们会想要使用'density'字段而不是'densityDpi'。 – 2016-04-12 16:58:24
请回答提问的问题。说一个可以用于答案的类的名字本身并不是一个答案。 – Megakoresh 2016-12-16 12:50:30
使用此
public static float pixelsToSp(Context context, float px) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return px/scaledDensity;
}
如果你想测试,如果这种方法可行权使用这个片段
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
另请参阅[this answer] (http://stackoverflow.com/a/42108115/3681880)为'DP - > PX','PX - > DP','SP到PX'和'PX到SP'转换。 – Suragch 2017-02-08 08:37:32