Мне нужно текущее TextSize из TextView в sp единицах.
Но getTextSize() возвращает размер в pixels. Так есть ли способ convert pixels to sp?
Мне нужно текущее TextSize из TextView в sp единицах.
Но getTextSize() возвращает размер в pixels. Так есть ли способ convert pixels to sp?
См. класс DisplayMetrics, в нем есть поля для densityDpi и scaledDensity.
Пример использования:
float sp = px / getResources().getDisplayMetrics().scaledDensity;
DisplayMetrics имеет поля densityDpi и scaledDensity, а не методы. А для масштабирования лучше использовать поле density, а не densityDpi.
- person Ted Hopp; 12.04.2016
Использовать это
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 должны быть одинаковыми.
странно видеть общедоступное поле, которое настраивается во время выполнения, но оно работает. Стандартное значение Dpi равно 160, поэтому каким бы ни было разрешение вашего устройства, скажем, 240, плотность и масштабируемая плотность будут показывать 240/160 = 1,5 Вот как вы конвертируете между пикселями и sp: px = 1,5 * sp
DP -> PX,PX -> DP,SP to PXиPX to SP. - person Suragch   schedule 08.02.2017