将像素转换为sp

时间:2011-06-07 09:30:52

标签: android textview

我需要TextSize单位中TextView的当前sp

getTextSize()会返回pixels中的大小。有没有办法convert pixels to sp

3 个答案:

答案 0 :(得分:136)

使用此

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"
        />

爪哇

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的字体大小应该相同。

答案 1 :(得分:32)

请参阅DisplayMetrics课程,其中包含densityDpiscaledDensity的字段。

使用示例:

float sp = px / getResources().getDisplayMetrics().scaledDensity;

答案 2 :(得分:5)

很奇怪看到在运行时调整的公共字段但是它有效。标准Dpi是160,所以无论你的设备Dpi是什么,比如240,密度和scaledDensity都会显示240/160 = 1.5 这是你在像素和sp:px = 1.5 * sp

之间进行转换的方法