Текстовое представление, возвращающее неправильный размер текста

Мне нужно получить размер текста в текстовом представлении, чтобы я увеличивал размер текста, пока пользователь нажимает кнопку, которая указывает на то, что это помогает увеличить размер текста в текстовом представлении. Позвольте мне прояснить, что я сделал до сих пор

у меня есть текстовое представление и установка его размера текста через папку 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;
}

Код взят отсюда.

Другие вопросы по тегам