2014-02-03 2 views
0

Я прочитал все, что могу найти, и я просто не могу понять это. У меня есть XML с заголовком, затем списком, а затем двумя кнопками в нижней строке. Чтобы сделать макет идеальным, у меня есть «жесткий код» размером (467dp) списка. Это хорошо на Samsung Galaxy S4, но я не уверен, что он будет выглядеть на других телефонах разных размеров. Я протестировал его на вкладке «Галактика 8», и это выглядело неправильно. Затем я протестировал его на вкладке 10.1 », и он (опять же) выглядел не так. В основном нижние кнопки были в середине экрана. Я обошел это, создав макеты для sw600dp и sw720dp. Для каждого из них мне пришлось жестко задавать другой размер для списка. Мне кажется, что есть лучший способ иметь XML-заголовок с заголовком-списком, который будет отображать (относительно) то же самое на любом устройстве. Может кто-нибудь, пожалуйста, скажите мне, как изменить свой XML, поэтому мне не нужно жестко указывать размер списка?Несколько размеров экрана и XML-макет

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/title_line" 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:gravity="center" 
    android:text="@string/workout_locations"> 
</TextView> 

<ListView 
    android:id="@+id/location_list" 
    android:layout_width="match_parent" 
    android:layout_height="467dp" 
    android:longClickable="true" > 
</ListView> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:orientation="horizontal" > 

    <ImageButton 
     android:id="@+id/help_button" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:contentDescription="@string/help_description" 
     /> 

    <ImageButton 
     android:id="@+id/add_button" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:contentDescription="@string/add_description" 
     /> 
</LinearLayout> 

</LinearLayout> 

ответ

0

Интересно, если это может помочь:

убедитесь, что вся компоновка является RelativeLayout, и внутри него, поставил ListView

<ListView 
    android:id="@+id/location_list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="50dp" // the size of the buttons height 
    android:longClickable="true" > 
</ListView> 

и под ним еще один RelativeLayout с кнопками внутри него.

<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="50dp" 
android:layout_gravity="bottom" 
android:layout_alignParentBottom="true"> 

<ImageButton 
    android:id="@+id/help_button" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:contentDescription="@string/help_description" 
    /> 

<ImageButton 
    android:id="@+id/add_button" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:contentDescription="@string/add_description" 
    /> 

Если это по-прежнему вызывает проблемы, то вы могли бы написать:

android:layout_above="@+id/relButtonLayout" 

внутри ListView.

+0

Этот работал для меня. Я поместил все в относительный макет (не нужно было несколько относительных макетов), установите последнее listview (одно с кнопками) на «android: layout_alignParentBottom =« true », и все получилось отлично. Я сделал то же самое со всеми другими XML файл в моем проекте, и он отлично выглядит. Спасибо! – UFGator

+0

Очень рад, что это помогло :) –

0

Используйте layout_weight, чтобы занять столько места, которое можно предоставить.

<ListView android:id="@+id/location_list" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
    android:longClickable="true" > 
</ListView> 
+0

См. Ниже, это не работает, потому что кнопки прокручиваются вверх в верхней части экрана.Мне нужно, чтобы они оставались в самом низу экрана. – UFGator

0

Если у вас есть жесткие коды, вы можете поспорить, что это не будет хорошо выглядеть на большинстве устройств. Для этого всегда лучше использовать layout_height и layout_weight для wrap_content или match_parent в зависимости от того, что вам нужно.

У вас также есть другой важный инструмент для описания дела: layout_weight, как вы уже могли использовать. Мессинг с ListView в соответствии с желаемым дизайном может быть сложным в первый раз, но как только вы узнаете, как настроить его макет, это легко для остальных.

В моем случае, это определение всегда работает, как следует:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <ListView 
    android:id="@+id/mylistview" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:scrollbars="vertical" > 
    </ListView> 
</LinearLayout> 

Взгляните на него: Я установил особые LinearLayout (в данном случае, потому что он имеет больше просмотров, чем просто ListView I» m), но я устанавливаю вес этого ListView в 1, являющийся sumWeights этого LinearLayout 1. Таким образом вы заверяете себя, что ListView будет расширяться до тех пор, пока он может, без необходимости использования значений жесткого кодирования.

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

+0

Я уже пробовал это. Проблема в том, что кнопки должны оставаться внизу. Когда вы определяете ListView как 0dp, кнопки прокручиваются вверх в верхней части экрана. Мне нужно, чтобы они оставались в самом низу экрана. – UFGator

+0

Затем просто добавьте свои кнопки в другой 'RelativeLayout' с параметром' orientation', установленным в 'horizontal' чуть ниже' LinearLayout', который содержит ваш 'ListView' и устанавливает его' layout_alignParentBottom' в 'true'. – nKn

1

андроида: layout_weight = "1 добавить это в кнопках

+0

Это не влияет. – UFGator

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