Как я могу создать макет для 320dp и 360dp?

1

Я очень разочарован. Я только что закончил свой проект на основе 360dp для "обычных экранов", но когда я попытался запустить в Motorola Atrix, у меня был сюрприз. Motorola Atrix - 360dp вместо 320dp, потому что его ширина составляет 540px. Теперь я ломаю голову, чтобы выяснить, что проблема должна быть решена. Как создать макет для 360dp?

Я пробовал все это:

  • RES/значения-sw360dp
  • RES/макет-sw360dp

main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#DFEFF1">

    <Button
        android:background="#AAAA11"
        android:id="@+id/button1"
        android:layout_width="@dimen/default_width"
        android:layout_height="@dimen/default_height"
        android:text="SOME TEXT 1"         
        />


    <Button
        android:background="#FFAA11"
        android:id="@+id/button2"
        android:layout_width="@dimen/default_width"
        android:layout_height="@dimen/default_height"
        android:text="SOME TEXT 2"
        android:layout_alignParentRight="true" />
</RelativeLayout>

RES/значения /strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <dimen name="default_width">160dp</dimen>
    <dimen name="default_height">160dp</dimen>

</resources>

Motorola Atrix

Изображение 174551

Samsung Galaxy SII

Изображение 174551

  • 0
    Не могли бы вы опубликовать код, чтобы мы могли направить вас в правильном направлении?
  • 0
    @Abhijit Я только что отредактировал свой пост и вставил макет и констант.
Теги:
android-emulator
android-layout

1 ответ

4

Как правило, при разработке макета вы хотите избежать планирования определенного размера пикселя. Если бы вы разделили все свои макеты на основе пикселей, как вы хотите, тогда вам придется почти предоставить один макет для каждого отдельного устройства (в мире так много устройств с экранами разного размера). Обычно вам нужно предоставить ресурсы макета для нескольких разных категорий. layout-small, layout-normal, layout-large и т.д. Если вы предоставите те, и ваши макеты построены в хорошем манере, он должен хорошо масштабироваться для устройств различного размера.

Есть ли что-то конкретное, что не так с вашим макетом, когда вы запускаете его в устройстве большего размера? Возможно, если вы опубликуете, что я могу помочь вам попытаться решить проблему без необходимости разделить ваши макеты по размеру пикселей.

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

РЕДАКТИРОВАТЬ:

Один из возможных способов решения вашей проблемы - не использовать статическое значение dp для ширины, а не позволять кнопкам расти, чтобы сколько угодно занимать пространство (по горизонтали), чтобы заполнить ширину экрана. Вы можете сделать это с помощью layout_weight и установить ширину для fill_parent. У меня нет доступа к eclipse сейчас, поэтому я не могу проверить, но я уверен, что есть и способ получить этот эффект без linearlayout, но это был первый способ, о котором я думал.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"

    android:background="#DFEFF1">

    <LinearLayout
     android:id="@+id/buttonRow"
     android:orientation="horizontal"
     android:layout_height="@dimen/default_height"
     android:layout_width="fill_parent">


    <Button
        android:background="#AAAA11"
        android:id="@+id/button1"
        android:layout_width="0"
        android:layout_height="@dimen/default_height"
        android:text="SOME TEXT 1"         
        android:layout_weight="1"
        />


    <Button
        android:background="#FFAA11"
        android:id="@+id/button2"
        android:layout_width="0"
        android:layout_height="@dimen/default_height"
        android:text="SOME TEXT 2"
        android:layout_weight="1" />

</LinearLayout>
</RelativeLayout>
  • 0
    Я только что отредактировал свой оригинальный пост. Я поставил 2 скриншота, один для Motorola Atrix и другой для Samsung Galaxy SII. Как видите, оба они разные. Это 2 кнопки с разными цветами фона.
  • 0
    когда вы используете layout_weight, вы должны установить layout_width на 0 (я думаю, что lint выдаст вам предупреждение, если вы используете fill_parent). Но в любом случае, все они хорошо работают в конце.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню