Разное разрешение поддержки Android
Отредактированный вопрос:
Разрешение для мобильных устройств:
Я хотел бы разработать различные разрешения экрана, как следующие разрешения.
320х480,
480 × 800,
540x960,
720x1280 (Samsung S3),
1080x1920 (S4, Nexus5, Nexus 5x, Moto G4),
2560 x 1440 (Nexus 6, Nexus 6p, край Samsung)
Разрешение планшета:
480х800 (микромакс),
600x1024 (Samsung Tab2),
800x1280 (nexus 7),
1200x1920 (новый Nexus 7),
2048x1536 (nexus 9)
Я хочу использовать разные размеры шрифта в зависимости от разрешения дисплея устройства.
Q1) Что такое best
способ решить это problem
?
Q2) Каков наилучший вариант выполнения кодирования броска или XML?
Q3) Какая папка для рисования соответствует разрешению устройства?
Q4) Размер иконки приложения Launcher для другого разрешения?
8 ответов
Размер иконки панели запуска приложения в пикселях для различного разрешения
Мобильное разрешение
- mipmap-mdpi (48X48)
- mipmap-hdpi (72X72)
- mipmap-xhdpi (96X96)
- mipmap-xxhdpi (144X144)
- mipmap-xxxhdpi (192X192)
Макеты планшетов:
Используйте следующие папки, если вы хотите иметь макеты для конкретного планшета:
layout-large-mdpi (1024x600)
layout-large-tvdpi (800x1280)
layout-large-xhdpi (1200x1920)
layout-xlarge-mdpi (1280x800)
layout-xlarge-xhdpi (2560x1600)
Папки Drawables:
мобильный
res/drawable (default) res/drawable-ldpi/ (240x320 and nearer resolution) res/drawable-mdpi/ (320x480 and nearer resolution) res/drawable-hdpi/ (480x800, 540x960 and nearer resolution) res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc) res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc) res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge).
Разрешение планшета:
Размеры шрифта:
ПРИМЕЧАНИЕ: всегда старайтесь использовать SP, когда вы имеете дело с
textSize
, лайкtextsize=12sp
Используйте предопределенный
textAppearance
:Он будет устанавливать размер текста автоматически в зависимости от плотности устройства.
<TextView android:textAppearance="?android:attr/textAppearanceSmall"/> <TextView android:textAppearance="?android:attr/textAppearanceMedium"/> <TextView android:textAppearance="?android:attr/textAppearanceLarge" />
Пример использования:
<TextView style="@android:style/TextAppearance.Small" android:text="Sample Text - Small" /> <TextView style="@android:style/TextAppearance.Medium" android:text="Sample Text - Medium" /> <TextView style="@android:style/TextAppearance.Large" android:text="Sample Text - Large" />
использование
dimension.xml
для каждого устройства:Из Google IO Pdf мы видим структуру ниже:
Мобильный телефон:
res/values/dimens.xml(default) res/values-ldpi/dimens.xml (240x320 and nearer resolution) res/values-mdpi/dimens.xml (320x480 and nearer resolution) res/values-hdpi/dimens.xml (480x800, 540x960 and nearer resolution) res/values-xhdpi/dimens.xml (720x1280 - Samsung S3, Micromax Canvas HD, etc) res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc)
res / values-xxxhdpi / dimensions.xml (1440X2560 - Nexus 6,Samsung S6edge).
Таблетка:
Для планшета вы можете использовать более конкретную папку, как
values-xlarge
,values-large
,res/values-large/dimens.xml (480x800) res/values-large-mdpi/dimens.xml (600x1024)
или же
res/values-sw600dp/dimens.xml (600x1024) res/values-sw720dp/dimens.xml (800x1280) res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10") res/values-large-xhdpi/dimens.xml (1200x1920 - Nexus 7"(latest))
Для дополнительной информации:
Обратитесь к разделу "Поддержка нескольких экранов".
См. Страницу № 77 Google IO Pdf для определения плотности устройства проектирования. В этом вы найдете способ справиться
dimens.xml
для разных разных устройств.- Подготовка приложений к Nexus 6 и Nexus 9.
Выдержка из поддержки нескольких экранов:
Плотно-независимый пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана "средней" плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование единиц измерения dp по мере необходимости на основе фактической плотности используемого экрана. Преобразование единиц измерения в пиксели экрана очень просто:
px = dp * (dpi / 160)
, Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать dp-единицы при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
Сначала вы создаете папки с разными значениями для разных экранов и устанавливаете размер в соответствии с экранами в res->values->dimens.xml
файл и вызвать простой размер шрифта, используя "@dimen/text_size"
,
res/values/dimens.xml
res/values-small/dimens.xml
res/values-normal/dimens.xml
res/values-xlarge/dimens.xml
//for small
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">15sp</dimen>
</resources>
//for normal
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">20sp</dimen>
</resources>
//for large
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">30sp</dimen>
</resources>
//for xlarge
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">40sp</dimen>
</resources>
и получить размер шрифта в TextView
как указано ниже.
<TextView
android:id="@+id/lblHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size"
android:textStyle="bold"
android:typeface="serif" />
Чтобы избежать проблем с разным разрешением экрана и разной плотностью, я определяю размер и располагаю все на основе процентной ширины и высоты экрана. Если размер текста изменяется в зависимости от ширины или высоты экрана в процентах, шрифт будет иметь правильный размер на всех устройствах и во всех разрешениях. Чтобы получить правильный размер шрифта на основе ширины и высоты его пространства, просто используйте эту функцию:
private float SetTextSize(String text, int width, int height)
{
Paint paint = new Paint();
float textWidth = paint.measureText(text);
float textSize = (int) ((width / textWidth) * paint.getTextSize());
paint.setTextSize(textSize);
textWidth = paint.measureText(text);
textSize = (int) ((width / textWidth) * paint.getTextSize());
// Re-measure with font size near our desired result
paint.setTextSize(textSize);
// Check height constraints
FontMetricsInt metrics = paint.getFontMetricsInt();
float textHeight = metrics.descent - metrics.ascent;
if (textHeight > height)
{
textSize = (int) (textSize * (height / textHeight));
paint.setTextSize(textSize);
}
return textSize;
}
Вот код для получения ширины и высоты экрана:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
}
else
{
Display display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
}
Чтобы получить нужный размер шрифта, просто создайте область, основанную на ширине экрана и высоте экрана, и изменяйте его, пока размер шрифта не будет выглядеть правильно. После того, как вы получите правильный внешний вид, он должен выглядеть правильно на всех устройствах.
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));
Я надеюсь, это поможет вам
В основном вам нужно создать стиль текста примерно так:
<style name="CodeFont">
<item name="android:textSize">30sp</item>
</style>
узнать больше об этом здесь http://developer.android.com/guide/topics/ui/themes.html
И с помощью поддержки Android для разных экранов вы можете создать разные размеры для разных экранов в правильных папках res, как описано в: http://developer.android.com/guide/practices/screens_support.html
Примечание: я не совсем понимаю, в какой ситуации вы бы хотели это сделать, использование единиц измерения SP для размеров шрифта приведет к тому, что шрифты будут выглядеть примерно одинаково на разных телефонах.
Сначала проект вашего приложения для одного разрешения.
пример: предположим, что ваше мобильное разрешение 380*480
mobile screen width:380
textView size is 80dp
Assume : if width is 380dp then 100 % then
textview width 80dp then how many %(per).
ower answer is: 25 %
найти размер экрана программно по формуле любимого
DisplayMetric displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
ScreenHeight = displaymetrics.heightPixels;
ScreenWidth = displaymetrics.widthPixels;
txt_height = (int)((ScreenHeight*14.58)/100);
txt_width = (int)((ScreenWidth*37.5)/100);
LinearLayout.LayoutParams normal_param = new LinearLayout.LayoutParams(txt_height ,txt_width );
txt_Name.setLayoutParams(normal_param);
Я думаю, что это хороший ответ:
Размер текста и разные размеры экрана Android
Но вот как вы можете сделать это с разрешением экрана:
Вы можете создать каталог ресурсов "значения" для каждого разрешения, как
values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp)
for example: 320*480 will be values-w320p-h480dp
В каждом dir (включая значения по умолчанию dir) создайте файл с именем "dimensions.xml" с содержимым:
for exmaple (the value related to the resolution):
<dimen name="def_font_size">10sp</dimen>
Теперь вы можете использовать "@dimension /def_font_size" или создать стиль в каталоге значений по умолчанию.
Добавьте это в "styles.xml":
<style name="FontSize">
<item name="android:textSize">@dimen/def_font_size</item>
</style>
Я создал функцию, которая конвертирует размер dp в размер в соответствии с размером экрана, и это работает хорошо для меня. Любой, у кого есть проблемы с размером текста в соответствии с экраном, должен попробовать это.
public float convertFromDp(int input) {
final float scale = getResources().getDisplayMetrics().density;
return ((input - 0.5f) / scale);
}
просто присвойте значение, заданное им, размеру текста программно, как показано ниже
tvTextView1.setTextSize(convertFromDp(24));
Для поддержки устройств nexus 6 создайте папку drawable-560dpi и поместите в нее все изображения.