Текстовое представление, возвращающее неправильный размер текста
Мне нужно получить размер текста в текстовом представлении, чтобы я увеличивал размер текста, пока пользователь нажимает кнопку, которая указывает на то, что это помогает увеличить размер текста в текстовом представлении. Позвольте мне прояснить, что я сделал до сих пор
у меня есть текстовое представление и установка его размера текста через папку Dimen
<TextView
android:id="@+id/tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp"
android:text="@string/flash"
android:textSize="@dimen/tv_text_fontsize"
android:gravity="fill_horizontal"
/>
чтобы поддерживать мой размер текста для всех размеров экрана, соответственно, я создал папку с разными размерами и установил размер текста следующим образом.
<dimen name="tv_text_fontsize">32sp</dimen>
Так что это 32sp для больших устройств, таких как планшеты.
Но когда я получаю размер текстового представления через Java, он возвращает мне неправильный размер текста. вот смотри ниже Но я получаю размер текста
float textSize = tvContentString.getTextSize();
но это возвращает мне неправильный размер текста textview.
Пожалуйста, предложите мне, как я могу получить точный размер текста, отображаемого в текстовом представлении. Поскольку я хочу увеличить размер текста при нажатии кнопки, поэтому для этого мне нужно получить фактический размер текста, т. Е. Если размер текста равен 32, я хочу увеличить его до 32+1 = 3sp.
Но когда я получаю размер текста, это нечто другое, например, для планшетов, я установил его 32sp, но он возвращает мне 42, так что с шагом 42+1 делаю его 43, а когда я устанавливаю его на кнопку, нажимаю на его неловкий вид.
Пожалуйста помоги!!! Как я могу получить реальный размер текста.??
1 ответ
Проблема в том, что getTextSize()
вернуть размер в пикселях, а не в sp. Таким образом, вы можете сначала преобразовать пиксели в sp.
tvContentString.setTextSize(TypedValue.COMPLEX_UNIT_SP, new_size);
Для преобразования из пикселей в sp используйте это -
public static float pixelsToSp(Context context, float px) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return px/scaledDensity;
}
Код взят отсюда.