Проблемы макета, связанные с поддержкой нескольких экранов - PullRequest
4 голосов
/ 11 ноября 2010

Я пытаюсь разработать приложение, для которого мне нужна поддержка нескольких экранов.Я прочитал статью для Android «Лучшие практики для поддержки нескольких экранов».В соответствии со статьей мы должны следовать 3 важным вещам:

  1. Упоминание поддержки для разных размеров экрана (большого, среднего и малого) и любой плотности в AndroidManifest.xml.
  2. Поместите изображения с разрешением 3 dpi (120, 160, 240) в 3 папки: res / ldpi, res / mdpi и res / hdpi.
  3. В макете размер должен быть указан в «dip»единицы.Тогда Android позаботится о масштабировании самостоятельно.

Я реализовал все эти пункты в своем проекте.Изображения правильно подобраны из соответствующих папок.Но расположение элементов управления не совпадает.

Например, я запустил приложение на трех эмуляторах


1.Разрешение 240 * 320 точек на дюйм 120.
2.Разрешение 240 * 320 точек на дюйм 160.
3.Разрешение 240 * 320 точек на дюйм 240.
(Все эмуляторы имеют одинаковое разрешение, но разную плотность.)

Проблема в том, что положение элементов управления не одинаково на всех трех эмуляторах.Насколько я понимаю, если android: layout_marginLeft и android: layout_marginTop упоминаются в «dip», то эта проблема не должна возникать.По мере увеличения плотности эмулятора элементы управления перемещаются все больше вправо.

Обязательно ли предоставлять макеты для всех комбинаций размеров экрана и плотности, даже если компоновка одинакова для всех устройств?

Я что-то упускаю из виду?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  <ImageView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:src="@drawable/bgd" android:scaleType="fitXY">
    </ImageView>
   <ImageView android:id="@+id/wtButton"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:src="@drawable/button" android:layout_marginLeft="170dip"
        android:layout_marginTop="9dip"></ImageView>
    <ImageView android:id="@+id/htButton"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:src="@drawable/button2" android:layout_marginLeft="220dip"
        android:layout_marginTop="90dip"></ImageView>
</RelativeLayout>

Изображения:

https://docs.google.com/leaf?id=0By3GYC3k5AMDNzUwNjkwMWEtOGQzZC00MjQ0LWE2OTgtYjFhYzZmM2ExOGVl&hl=en&authkey=CLOEsZsI

Ответы [ 3 ]

3 голосов
/ 18 марта 2013

Да, вам нужно ДОБАВИТЬ следующую вещь в файле манифеста, тогда только она примет Resorces из ldpi, mdpi, orhdpi согласно потребности

   <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

    <compatible-screens>
 <screen
            android:screenDensity="mdpi"
            android:screenSize="mediaum" />      
  <screen
            android:screenDensity="hdpi"
            android:screenSize="large" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="large" />
    </compatible-screens>
0 голосов
/ 06 декабря 2012

Проблема в том, что размер устройств увеличивает размер вашего изображения, уменьшается. Соответственно измените размер изображения (увеличьте размер изображения в формате mdp и ldpi). Если вы хотите нацелиться на серию Nexus, он всегда нацелен на Xhdpi и hdpi, что является настоящей болью. Вы также можете сослаться на мой ответ здесь: Android: поддержка нескольких экранов

0 голосов
/ 11 ноября 2010

Сначала вы рассчитываете высоту и ширину устройства

, затем, если вы хотите установить 180 в качестве значения левой панели и 48 в качестве значения верхней части для просмотра, установите его как

(320 / 1,8 = 1,77)

meterView.setPadding ((int) (ширина / 1,8), (int) (высота / 10), 3, 5);

попробуйте это.

...