Динамическое изменение размера текста в зависимости от планшета - PullRequest
10 голосов
/ 27 марта 2012

Со всеми усилиями я наконец дошел до конца своего первого приложения на андроиде. И спасибо всем. Но после того, как я подошел к концу, я понял одну вещь: размер текста моего приложения одинаков для всех размеров планшета. Поэтому я перефразирую свой вопрос.

Проблема: Я использовал свой собственный размер текста во всем приложении. и кое чем устраивает 7 дюймовый планшет. Но когда я смотрю то же самое на 8,9-дюймовом и 10,1-дюймовом планшете, он содержит много пробелов и размер текста также относительно мал. Так есть ли способ, которым я могу изменить размер текста в зависимости от размера моего планшета ??? Это может показаться новичком, но я борюсь с этим, потому что то же приложение, которое прекрасно выглядит в 7 дюймов, теряет свою сущность в 8,9 и 10,1 дюйма. Или есть что-то еще, что я мог бы сделать с моим приложением для того же. Возможное решение: - Как показывает моя тема, есть ли способ изменить размер текста при изменении размера планшета. Либо динамически, либо любым другим способом.

РЕДАКТИРОВАНИЕ :: Согласно ответу Cheeta, подход правильный, но я не могу сделать это для каждой кнопки макета, текстовых полей и других полей. Есть сотни таких полей в одном приложении. Могу ли я сделать это в каком-то одном месте и назвать его обязательным атрибутом. Является ли пользовательский тег подходом, который я ищу. Возможно ли ????

Любая помощь будет оценена. Заранее спасибо.

ПРИМЕЧАНИЕ Я не дошел до ответа, но ответ гепарда несколько ведет к правильному пути. Я отмечаю его ответ как правильный, хотя есть несколько вопросов, связанных с его ответом. Любой другой ответ всегда приветствуется. Спасибо

Ответы [ 4 ]

32 голосов
/ 18 августа 2012

После проверки некоторых ресурсов я наконец-то нашел следующее решение: В layout-xml я определяю размер кнопки-текста с помощью объявление измерения:

android:textSize="@dimen/campaign_textfontsize"

Я создал файл измерение.xml в подкаталоге "/ values" с соответствующим значением

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="campaign_textfontsize">18dp</dimen>
</resources>

Затем я создал вторую папку значений "/ values-sw720dp" и скопировал в нее старый размер .xml. В этом измерении. Xml я адаптировал значение размера шрифта:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="campaign_textfontsize">24dp</dimen>
</resources>

Исходя из текущего размера экрана, Android выбирает правильное значение размера. Таким образом, без какого-либо кода шрифт адаптируется к размеру дисплея (и соответствующей кнопки).

Надеюсь, это поможет ...

14 голосов
/ 27 марта 2012

У меня возникла та же проблема, но то, что я понял, sp/db неэффективно для решения этой проблемы, я обработал вещи, связанные с выравниванием и размером шрифта программно.

Вот шаги, как яРешил эту проблему.

  • Рассчитать ширину экрана и высоту вашего устройства
  • Использовать Set TextView.setTextSize(unit, size), где параметр unit равен TypedValue.COMPLEX_UNIT_PX, а параметр size является процентом от общего числа.ширина вашего экрана.Обычно для меня подходит .5% от общей ширины шрифта.Вы можете поэкспериментировать, попробовав другие значения общей ширины, например 0,4% или 0,3%.

Таким образом, ваш шрифт size всегда будет подходить для каждого размера текста / экрана.

1 голос
/ 27 марта 2012

не нужно динамически менять размер текста, используйте sp для размера текста, он автоматически подстраивает размер текста в зависимости от разрешения экрана .. как в телефоне.

android:textSize="10sp"
0 голосов
/ 07 декабря 2018

Это довольно старый вопрос, но другое современное решение может быть очень удобным.
С помощью библиотеки поддержки доступно более 26 новых авто-размеров текста.
Проще говоря, вы определяете размер TextView, и размер текста автоматически увеличивается / уменьшается, чтобы соответствовать его границам:

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    app:autoSizeTextType="uniform"
    app:autoSizeMinTextSize="12sp"
    app:autoSizeMaxTextSize="100sp"
    app:autoSizeStepGranularity="2sp" />

Подробнее о Авторазмер TextViews

Добавьте сюда возможность устанавливать размер TextView в процентах от экрана с помощью ConstraintLayout, и вы можете создавать макеты, которые выглядят практически одинаково на любом устройстве.

...