Разное разрешение поддержки 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:

  1. мобильный

    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).
    
  2. Разрешение планшета:введите описание изображения здесь

    Размеры шрифта:

ПРИМЕЧАНИЕ: всегда старайтесь использовать SP, когда вы имеете дело с textSize, лайк textsize=12sp

  1. Используйте предопределенный 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" />
    
  2. использование dimension.xml для каждого устройства:

    Из Google IO Pdf мы видим структуру ниже:

    1. Мобильный телефон:

      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).

    2. Таблетка:

      Для планшета вы можете использовать более конкретную папку, как 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))
      

Для дополнительной информации:

  1. Обратитесь к разделу "Поддержка нескольких экранов".

  2. См. Страницу № 77 Google IO Pdf для определения плотности устройства проектирования. В этом вы найдете способ справиться dimens.xml для разных разных устройств.

  3. Подготовка приложений к 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 и поместите в нее все изображения.

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