2016-03-09 5 views
1

Я борюсь с тем, чтобы мои макеты были настроены и подхвачены Android.
создать тестовую программу, с этими каталогами ресурсов:Как заставить Android выбирать разные макеты на основе размера экрана

  • расположения
  • макет большого
  • расположение нормального
  • макет небольшой
  • макета sw600dp
  • макетом sw720dp
  • макет-w600dp
  • макет-w720dp
  • макет XLarge

Они в основном содержат один и тот же файл макета, единственное отличие состоит в том, что один вид текста просто имеет содержание имени каталога раскладки:

<android.support.v7.widget.AppCompatTextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/btnTest" 
     android:text="Layout xxxxx" /> 

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

Configuration config = getResources().getConfiguration(); 
String sizeName = getSizeName(this); 

Log.d(TAG, String.format("screen config smallestScreenWidthDp:%d screenWidthDp:%d densityDpi:%d sizeName: %s" , 
       config.smallestScreenWidthDp, config.screenWidthDp, config.densityDpi, sizeName)); //NON-NLS 
  • Nexus 6P, 1440x2560, 518ppi:
    • smallestScreenWidthDp: 360 screenWidthDp: 360 densityDpi: 640 sizeName: нормальный
  • Galaxy S4 мини, 4,3" 540x960, 256ppi:
    • smallestScreenWidthDp: 360 screenWidthDp: 360 densityDpi: 240 sizeName: нормальный
  • Wiko Гоа, 3.5" 320х480, 165 PPI:
    • smallestScreenWidthDp: 320 screenWidthDp: 320 densityDpi: 160 sizeName: нормальный

Что я делаю неправильно?

EDIT: Это не проблема с AVD, я получаю такое же поведение на физических устройствах; мое приложение выбирает нормальную раскладку как на устройствах Nexus 6P (1440x2560, 518ppi), так и на устройстве Wiko GOA (320x480, 165 пикселей).

Вот мой test project для справки.

+0

Пожалуйста, попробуйте эту метку DisplayMetrics = getResources(). GetDisplayMetrics(); –

+0

имя ваши большие, нормальные и маленькие папки для sw обозначения также. Не смешивайте оба соглашения об именах вместе –

+0

@ M.S.P, так что я должен делать с этим? DisplayMetrics.densityDpi возвращает то же значение, что и мой другой выход журнала. –

ответ

0

Либо вы, пользователь, маленький, обычный или большой или используете папки с папкой dp, устройство Android автоматически выберет правильный макет в соответствии с размером экрана.

Надеюсь, что это сработает!

+0

Снятие sw и w папок, только оставляющих -mall, -normal, -больших & -больших нетронутых, ничего не сделал –

+0

вы, пожалуйста, сделайте наоборот, оставайтесь sw и w расположение папок и удаление других. –

+0

Я также разработал приложение для экрана размером 5, 7 и 10 дюймов соответственно, и для этого я использую только простые, sw600dp и sw720dp. –

0

По определению

нормально: Экраны, которые имеют одинаковый размер с HVGA экрана средней плотности. Минимальный размер макета для обычного экрана составляет приблизительно 320x470 dp единиц. Примерами таких экранов являются WQVGA с низкой плотностью, HVGA с высокой плотностью WVGA.

Но, так как ваши размеры выражаются в рх, мы должны использовать следующую формулу для преобразования их в дп:

dp = 160 * (px/dpi) 

Теперь давайте рассмотрим первый один:

  • Nexus 6P, 1440x2560, с плотностьюDpi: 640

В данном случае:

dp(x) = 160 * (1440/640) = 360 
dp(y) = 160 * (2560/640) = 640 

Таким образом, это устройство можно считать «нормальным».

Учитывая второе:

  • Galaxy S4 мини, 4.3" 540x960 с densityDpi: 240

В этом случае:

dp(x) = 160 * (540/240) = 360 
dp(y) = 160 * (960/240) = 640 

Таким образом, это устройство также может быть считая «нормальным» (это точно так же, как первый)

Это означает, что фактический размер устройств в основном одинаковый для каждого тестируемого устройства.

Итак, если вы хотите большее устройство, может быть, вы должны lessener в densityDpi

Например, если у меня есть устройство, как на S4 мини (540x960), но с densityDpi: 160 получат:

dp(x) = 160 * (540/160) = 540 
dp(y) = 160 * (960/160) = 960 

Это должно соответствовать большому или x-большому устройству

+0

. Как перевести это в папки Layout, I.e. как я могу использовать разные файлы макетов для этих трех примеров? –

+0

Как я уже сказал, устройства имеют одинаковый размер. Поэтому, я думаю, вам нужно настроить правильное виртуальное устройство. Lesser разрешение для одного из этих трех устройств увеличит фактический размер – GVillani82

+0

Ну, это происходит и на физических устройствах. Мое приложение предпочитает использовать обычный макет как на Nexus 6P (1440x2560, 518ppi), так и на Wiko GOA (320x480, 165ppi), поэтому это не проблема с AVD. –

Смежные вопросы