Различные разрешения поддержки android

Отредактированный вопрос:

Разрешение для мобильных устройств:. Я хотел бы создать различные экраны, например, следующие разрешения.
320x480,
480 × 800,
540x960,
720x1280 (Samsung S3),
1080x1920 (S4, Nexus5, Nexus 5x, Moto G4),
2560 x 1440 (Nexus 6, Nexus 6p, Samsung)

Разрешение планшета:
480x800 (micromax),
600x1024 (samsung tab2),
800x1280 (nexus 7),
1200x1920 (новый nexus 7),
2048x1536 (nexus 9)

Я хочу использовать разные размеры шрифта в зависимости от разрешения дисплея устройства.

Q1) Что такое best способ решения этой проблемы? problem?

Q2) Что лучше всего делать с кодированием throw или XML?

Q3) Какая доступная папка представляет, какое разрешение устройства?

Q4) Размер значка приложения Launcher для разного разрешения?

Ответ 1

Размер значка приложения для запуска в пикселях для разного разрешения

Мобильное разрешение

  • 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).
    
  • Разрешение планшета: enter image description here

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

ПРИМЕЧАНИЕ.. Всегда старайтесь использовать 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/dimens.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))
      

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

Выдержка из Поддержка нескольких экранов:

Не зависящий от плотности пиксель эквивалентен одному физическому пикселю на 160 т/д, что является базой плотности, принятой системой для экрана плотности "средний" . Во время выполнения система прозрачно обрабатывает любое масштабирование блоков dp, если необходимо, на основе фактического плотность используемого экрана. Преобразование блоков dp ​​в экран пикселы просты: px = dp * (dpi / 160). Например, на 240 dpi screen, 1 dp равно 1,5 физическим пикселям. Вы всегда должны использовать dp при определении пользовательского интерфейса приложения, чтобы обеспечить правильное отображение ваш пользовательский интерфейс на экранах с различной плотностью.

Ответ 2

Сначала вы создаете папки с различными значениями для разных экранов. Поместите размер в соответствии с экранами в файле 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" />

Ответ 3

В принципе вам нужно создать текстовый стиль примерно так:

<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 для размеров шрифтов будет масштабировать шрифты, чтобы они выглядели более или менее одинакового размера на разных телефонах.

Ответ 4

Чтобы избежать проблем с различными разрешениями экрана и различной плотностью, я задаю размер и положение всего, основываясь на процентной ширине и высоте экрана. Если размер текста изменяется в зависимости от процентной ширины или высоты экрана, шрифт будет иметь правильный размер на всех устройствах и всех разрешениях. Чтобы получить правильный размер шрифта на основе ширины и высоты его пространства, просто используйте эту функцию:

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

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

Ответ 5

Сначала ваш дизайн приложения для одного разрешения.

пример: предположим, что ваше мобильное разрешение 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 %

программный поиск размера экрана с использованием формулы belove

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

Ответ 6

Я думаю, что это хороший ответ:

Размер текста и различные размеры экрана Android

Но вот как вы можете это сделать с разрешением экрана:

Вы можете создать каталог ресурсов "values" для каждого разрешения, например

values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp)
for example: 320*480 will be values-w320p-h480dp

В каждом каталоге (включая значения по умолчанию dir) создайте файл с именем "dimens.xml" с контентом:

 for exmaple (the value related to the resolution):
 <dimen name="def_font_size">10sp</dimen>

Теперь вы можете использовать параметр "@dimen/def_font_size" или создать стиль в каталоге значений по умолчанию.

Добавьте это в "styles.xml":

<style name="FontSize">
    <item name="android:textSize">@dimen/def_font_size</item>
</style>

Ответ 7

Я создал функцию, которая преобразует размер dp в размер в соответствии с размером экрана, и он работает хорошо для меня. Любой, у кого есть проблема с размером текста в соответствии с экраном, должен попробовать.

public float convertFromDp(int input) {
    final float scale = getResources().getDisplayMetrics().density;
    return ((input - 0.5f) / scale);
}

просто задайте значение, указанное им, размеру текстового вида, как показано ниже

tvTextView1.setTextSize(convertFromDp(24));

Ответ 8

Для поддержки устройства nexus 6 создайте папку drawable-560dpi и поместите в нее все изображения.