Intereting Posts
Не может получить доступ к памяти по адресу 0X1 после настройки gdb и eclipse для отладки общей библиотеки из приложения Android AudioRecord: переполнение буфера? Выбрать несколько изображений в галерее Android У Android-телефонов есть MAC-адрес при подключении к 3G? Как сделать встроенную ОС Android только одним приложением? Android Studio – панель действий удалить Android Studio Не удалось найти метод runProguard () для аргументов? Как я могу использовать сообщение Cloud Firebase в проекте eclipse? Анимация меню опций Разрешающая способность Android Marshmallow на OS 4.0 READ_EXTERNAL_STORAGE разрешений всегда не предоставляется Как добавить несколько TextView dynamicall в определение LinearLayout в main.xml Как прокрутить анимацию программно Невероятно неточные точки GPS. Какова причина? Msgstr "ошибка: не удается найти символьную переменную xml" при попытке Google Analytics Как заменить фрагмент C на фрагмент A при нажатии кнопки «Назад»?

Преобразование пикселей в sp

Мне нужен текущий TextSize для TextView в единицах sp .

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

Solutions Collecting From Web of "Преобразование пикселей в 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; } 

Если вы хотите проверить, работает ли этот метод правильно, используйте этот фрагмент

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, поэтому, независимо от вашего устройства Dpi, скажем, 240, плотность и масштабированная плотность будут показывать 240/160 = 1,5. Так вы конвертируете между пикселями и sp: px = 1.5 * sp