Конвертировать пиксели в sp - PullRequest
52 голосов
/ 07 июня 2011

Мне нужен ток TextSize из TextView in sp единиц.

Но getTextSize() возвращает размер в pixels.Так есть ли способ к convert pixels to sp?

Ответы [ 3 ]

138 голосов
/ 10 февраля 2012

Используйте это

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 должен быть одинаковым.

33 голосов
/ 07 июня 2011

См. Класс DisplayMetrics , в нем есть поля для densityDpi и scaledDensity.

Пример использования:

float sp = px / getResources().getDisplayMetrics().scaledDensity;
5 голосов
/ 16 декабря 2012

странно видеть открытое поле, которое корректируется во время выполнения, но работает.Стандартное значение Dpi равно 160, поэтому независимо от того, какое значение для вашего устройства имеет значение Dpi, скажем, 240, плотность и scaledDensity будут отображаться 240/160 = 1,5. Таким образом, вы конвертируете между пикселями и sp: px = 1.5 * sp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...