Я знаю, это обсуждалось уже 1000 раз, но я не могу настроить размер текста под разные размеры экрана. Я пытаюсь использовать sp в качестве единиц размера в своем индивидуальном стиле:
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
...
<item name="android:textSize">30sp</item>
...
</style>
В 2.7 QVGA выглядит нормально:
Но в 7in WSVGA это выглядит так:
Я пробовал использовать и sp, и dp с тем же результатом.
Не могли бы вы объяснить, как сделать так, чтобы эти кнопки выглядели одинаково на любом экране?
Полный пользовательский стиль кнопки
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/custom_button</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">3dp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:gravity">center</item>
<item name="android:textSize">30sp</item>
<item name="android:textStyle">bold</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">2</item>
</style>
И в моей теме приложения у меня есть
<item name="android:buttonStyle">@style/CustumButtonStyle</item>
А вот мой макет:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">
<Button
android:id="@+id/buttonContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/buttonNewGame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonContinue"
android:layout_alignRight="@+id/buttonContinue"
android:layout_below="@+id/buttonContinue"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/ButtonAbout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonNewGame"
android:layout_alignRight="@+id/buttonNewGame"
android:layout_below="@+id/buttonNewGame"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
android
screen-size
text-size
forcelain
источник
источник
Ответы:
@forcelain Я думаю, вам нужно проверить этот Google IO Pdf для дизайна . В этом PDF-файле перейдите на страницу №: 77, на которой вы найдете, как предлагается использовать sizes.xml для разных устройств Android, например, см. Структуру ниже:
Например, в значениях вы использовали размер .xml ниже.
В папке с другими значениями вам нужно изменить значения для вашего размера текста.
Примечание. Как указано в @espinchi, small, normal, large и xlarge устарели с Android 3.2 в пользу следующего:
Объявление макетов планшета для Android 3.2
источник
Думаю, уже слишком поздно отвечать в этой ветке. Но я хотел бы поделиться своей идеей или способом решения проблемы с размером текста на устройствах с разностным разрешением. Многие сайты разработчиков Android предлагают использовать sp unit для размера текста, который будет обрабатывать размер текста для устройств с разностным разрешением. Но я всегда не могу добиться желаемого результата. Итак, я нашел одно решение, которое использую из своих последних 4-5 проектов, и оно отлично работает. Согласно моему предложению, вы должны указать размер текста для каждого устройства разрешения, что немного утомительно, но оно удовлетворит ваши требования. Каждый разработчик должен знать о соотношении 4: 6: 8: 12 (h: xh: xxh: xxxh соответственно) . Теперь внутри папки res вашего проекта вам нужно создать 4 папки с размером файла, например.
Теперь внутри файла sizes.xml вы должны разместить размеры текста. Я показываю вам код для values-hdpi , аналогично вам нужно разместить код для других значений разрешения / файла sizes.xml.
Для других разрешений это похоже на xhdpi : 6px, xxhdpi : 8px, xxxhdpi : 12px. Это рассчитывается с соотношением (3: 4: 6: 8: 12), которое я написал выше. Давайте обсудим другой пример размера текста с указанным выше соотношением. Если вы хотите взять размер текста 12 пикселей в формате hdpi, то в другом разрешении это будет
Это простое решение для реализации необходимого размера текста для всех разрешений. Я не рассматриваю здесь устройства с разрешением mdpi . Если кто-то хочет включить размер текста для этого разрешения, тогда соотношение будет примерно 3: 4: 6: 8: 12 . По любым вопросам, пожалуйста, дайте мне знать. Надеюсь, это поможет вам, люди.
источник
Иногда лучше иметь только три варианта
Используйте маленький и большой, чтобы отличать экран от обычного размера.
В обычном режиме вам не нужно ничего указывать.
Используя это, вы можете избежать тестирования и указания размеров для разных размеров экрана.
источник
Я сделал то же самое по размеру и нарисовал что-то вроде (с dp, но только для текста и в drawText ())
XML:
Код:
источник
dp
для размера текста ... используйтеsp
вместо этого.Каждый может использовать указанную ниже библиотеку Android, которая является самым простым способом сделать размеры текста совместимыми практически со всеми экранами устройств. На самом деле он разработан на основе новых квалификаторов конфигурации Android для размера экрана (представленных в Android 3.2) SmallestWidth swdp.
https://github.com/intuit/sdp
источник
Если у вас есть API 26, вы можете рассмотреть возможность использования autoSizeTextType :
Настройка по умолчанию позволяет автоматически изменять масштаб TextView по горизонтальной и вертикальной осям.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
источник
Я думаю, вы можете заархивировать это, добавив несколько ресурсов макета для каждого размера экрана, например:
Ссылка: 1. http://developer.android.com/guide/practices/screens_support.html
источник
Чтобы унифицировать все экраны для отображения одинаковых размеров элементов, включая размер шрифта: - Создайте пользовательский интерфейс на одном экране с любыми размерами, которые вы сочтете подходящими во время разработки, например, размер шрифта TextView составляет 14 точек на дюйм при размере экрана по умолчанию с размером экрана 4'6 дюймов.
Программно рассчитайте физический размер экрана других телефонов, то есть 5 футов 2 дюйма других телефонов / экранов.
Используйте формулу для расчета процентной разницы между двумя экранами. т.е. какая разница между 4'6 и 5'2%.
Рассчитайте разницу в пикселях между двумя TextView на основе приведенной выше формулы.
Получите фактический размер (в пикселях) TextView font-size и примените разницу в пикселях (рассчитанную ранее) к размеру шрифта по умолчанию.
Таким образом вы можете применить динамическое соотношение сторон ко всем размерам экрана, и результат будет отличным. У вас будет одинаковый макет и размеры на каждом экране.
Сначала это может быть немного сложно, но вы полностью достигнете цели, как только вы разберетесь с формулой. С помощью этого метода вам не нужно создавать несколько макетов только для разных размеров экрана.
источник
Вы можете также использовать
weightSum
иlayout_weight
свойство корректировать другой экран.Для этого вы должны сделать
android:layout_width
= 0dp иandroid:layout_width
= (как хотите);источник
Как упоминалось в @espinchi из 3.2 (уровень API 13), группы размеров устарели. Диапазоны размеров экрана - это наиболее предпочтительный подход в будущем.
источник
Не указывайте жестко размеры.
Для гибкости и новых разрешений экрана лучше всего поместить фиктивный TextView в макет для получения textSize:
И в вашем коде, например:
Сохраните
textSize
в качестве ссылки, к которой вы можете добавить постоянный размер или размер процента (путем расчета).источник