Макет Android неправильно растянут на маленьком устройстве - PullRequest
0 голосов
/ 01 апреля 2012

Я занимаюсь разработкой приложения для Android.Мой основной макет - RelativeLayout.

Когда я открываю приложение для отладки в эмуляторе большого экрана, все работает нормально.Но когда я открываю его на устройстве QVGA, я вижу, что макет искажен.

Нужно ли мне делать новый макет для каждого размера экрана?Я видел в некоторых местах, что Android может автоматически растягивать все, чтобы соответствовать макету ...

Developer.android.com говорит:

По умолчанию Android изменяет размер макета приложения досоответствовать текущему экрану устройства.

(http://developer.android.com/guide/practices/screens_support.html)

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

Заранее спасибо!

Изображение на большом экране http://www.interload.co.il/upload/6549026.png Изображение на маленьком экране http://www.interload.co.il/upload/9617759.png

Редактировать: XML-код проблемной страницы. Вся графика находится в папке drawable-hdpi, но, опять же, проблема не в самих изображениях, а в макете.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background" xmlns:android1="http://schemas.android.com/apk/res/android">
<ImageView
    android:id="@+id/selectionHead"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/header" />


<ImageView
    android:id="@+id/chooseFormatTxt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/selectionHead"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp"
    android:src="@drawable/step1_choose_format" />

<ImageView
    android:id="@+id/videoBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="42dp"
    android:onClick="VideoClick"
    android:src="@drawable/step1_video" />


<ImageView
    android:id="@+id/orTxt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/videoBtn"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="19dp"
    android:src="@drawable/step1_or" />

<ImageView
    android:id="@+id/audioBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/orTxt"
    android:layout_alignLeft="@+id/videoBtn"
    android:layout_marginBottom="22dp"
    android:layout_centerHorizontal="true"
    android:onClick="AudioClick"
    android:src="@drawable/step1_audio" />

<ImageView
    android1:id="@+id/step1Share"
    android1:layout_width="wrap_content"
    android1:layout_height="wrap_content"
    android1:layout_alignBottom="@+id/selectionHead"
    android1:layout_alignParentRight="true"
    android:layout_marginBottom="10dp"
    android:layout_marginRight="5dp"
    android1:src="@drawable/share" />

</RelativeLayout>

1 Ответ

2 голосов
/ 01 апреля 2012

Нужно ли создавать новый макет для каждого размера экрана?

Вам необходимо создать новый макет, когда существующие макеты не работают, и вы решили создать новый макет, а не решать проблему другими способами.

Не могли бы вы помочь мне выяснить, почему компоновка будет выглядеть искаженной на небольшом устройстве?

Ваш макет в порядке, поскольку он делает именно то, что вы сказали:

  • Кнопка видео на 42 дп выше нижней части макета
  • Строка "или" на 19 пд выше кнопки видео
  • Кнопка аудио находится на 22 дп выше линии «или»

Это составляет 83 dp плюс размеры различных изображений, что явно делает его слишком высоким.

Если это не то, что вы хотите сделать на маленьком экране, либо:

  • Придумайте другой макет для -small устройств или
  • Используйте ресурсы измерений вместо жестко заданных значений и используйте разные значения для этих измерений для -small устройств или
  • ...
...