Размеры экрана Android - Проблемы с макетом. Можно просто растянуть, а не определить 4 макета?

Я потратил много времени на разработку макетов и размеров экрана. Я прочитал документ Android здесь, который помог и имеет смысл: http://developer.android.com/guide/practices/screens_support.html

Итак, теперь у меня есть приложение, показывающее абсолютно одинаковый размер на разных размерах экрана, так как все мои элементы используют DIP ( Density независящие пиксели).

Однако передо мной два устройства, одно больше другого, так что это означает, что в нижней части экрана с большим размером экрана ( Sensation XE) имеется некоторое пустое пространство, чем на экране с немного меньшим размером ( Desire Z).

При прочтении документа Android основное решение заключается в создании макетов для больших, больших, обычных и маленьких экранов с разным количеством DIP.

Это здорово, но с моим макетом, который очень сложный (много пользовательских видов, много кнопок, 3 вида текста, много изображений, которые можно отделить друг от друга, чтобы они могли светиться), очень много работы по воссозданию этих макетов.

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

У меня вопрос, есть ли способ сделать это без необходимости воссоздать макет 4 раза? Да, я понимаю, что могу скопировать и вставить большую часть этого, но было бы очень удобно просто растянуть то, что у меня есть.

Я тестировал на планшетном устройстве, и оно показало хорошо, но все было крошечным и не заполняло экран. У меня есть изображения разных размеров в разных папках (от xhdpi до ldpi), поэтому выбор правильного изображения не должен быть проблемой.

Спасибо, любая помощь очень ценится.

2 ответа

Решение

Да, в общем случае вы можете растянуть вещи под свой макет, используя fill_parent для android: layout_width и / или android: layout_height на определенных виджетах. Вы также можете пропорционально масштабировать, устанавливая layout_weight соответствующим образом для серии виджетов в LinearLayout. Как это сделать на самом деле зависит только от того, что вы хотите сделать, и очень трудно ответить в резюме. Если у вас есть пример и вопрос о том, как сделать что-то конкретное, вам будет проще ответить.

Вот пример RelativeLayout, который использует fill_parent для обработки экранов разных размеров:

<?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" >
    <TextView 
        android:id="@+id/first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#ff880000"
        android:text="Some text" />
    <TextView 
        android:id="@+id/second"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@id/first"
        android:layout_toRightOf="@id/first"
        android:background="#ff008800"
        android:text = "More text" />
    <TextView 
        android:id="@+id/third"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/first"
        android:background="#ff000088"
        android:text="Even more text" />
    <TextView 
        android:id="@+id/fourth"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/third"
        android:background="#ff008888"
        android:text="The last text" />
    </RelativeLayout>

В соответствии с документацией по Android, вы можете использовать Относительный макет, чтобы удовлетворить ваши потребности. используйте Относительное положение для элементов в вашем представлении. Вы можете использовать следующие атрибуты:

для полного списка атрибутов нажмите здесь

Другие вопросы по тегам