6

Я знаю, что это можно сделать очень легко, используя Relative Layout, но я чувствую, что я делаю правильно и должен дать мне желаемый результат с помощью Linear Layout. Но по какой-то причине, когда я запускаю это на Google Nexus 7 под управлением Android JB 4.1.2, я вижу кнопку и текстовое представление сразу после элементов списка. Если вид списка пуст, я вижу их в верхней части экрана. Я делаю что-то неправильно?? Вот мой XML-файлПопытка нажать кнопку внизу линейного макета в Android

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/attachments_list" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:weightSum="1" 
android:orientation="vertical"> 
<ListView 
    android:id="@+id/mtg_attachments" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" /> 
<Button 
    android:id="@+id/attach_delete" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="@string/delete" 
    android:textSize="22sp" /> 
<TextView 
    android:text="@string/attach_warning" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" /> 
</LinearLayout> 
+1

Что произойдет, если вы удалите атрибут 'android: weightSum' из' LinearLayout'? –

+0

Как сказал Тед Хопп, я считаю, что вы должны удалить атрибут суммы веса из линейного макета. – Leeeeeeelo

+0

Я попытался удалить весы ... Ничего не происходит с этим ... Это остается тем же. – Sriman

ответ

0

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

Вместо этого используйте RelativeLayout.

Так заменить:

android:layout_gravity="center" 

для соответствующего RelativeLayout варианта:

android:layout_centerInParent="true" 
+0

Как я уже сказал, я знаю, что Relative Layout будет работать и уже пробовал это. Но я обычно использую Linear Layouts в моих приложениях и было просто любопытно, почему это не дало мне желаемых результатов ... Поэтому я не могу принять ваше решение, хотя оно работает ... – Sriman

+0

Похоже, что я должен наконец пойти с Relative Layout ... Будет ждать, если кто-то еще появляется что-то интересное .... – Sriman

1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/attachments_list" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:weightSum="1" > 
<ListView 
    android:id="@+id/mtg_attachments" 
    android:layout_width="fill_parent" 
    android:layout_height="70dp" 
    android:layout_weight="0.9" /> 
<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" 
    android:layout_weight="0.1" 
    android:gravity="bottom" > 
    <Button 
     android:id="@+id/attach_delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="delete" 
     android:textSize="22sp" /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="attach_warning" 
     android:textSize="18sp" /> 
</LinearLayout> 
</LinearLayout> 
+0

Хотя это может сработать, я не хочу указывать пробел для кнопки и текстового поля. Они должны просто взять то, что им нужно внизу, и список должен занимать остальную часть пространства. Поэтому я не думаю, что это решение ... – Sriman

0

изменить код XML.

с использованием android:layout_weight для настройки процентной доли вашего макета.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/attachments_list" 
    android:layout_width="fill_parent" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:weightSum="1" 
    android:orientation="vertical"> 
<ListView 
    android:id="@+id/mtg_attachments" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.8" /> 
<Button 
    android:id="@+id/attach_delete" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_gravity="center" 
    android:layout_weight="0.1" 
    android:text="@string/delete" 
    android:textSize="22sp" /> 
<TextView 
    android:text="@string/attach_warning" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="0.1" 
    android:textSize="18sp" /> 
</LinearLayout> 
+0

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

1

Sriman, пожалуйста, взгляните на этот ответ, а затем скажите мне, полезно ли это.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/attachments_list" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="bottom" 
android:orientation="vertical" 
android:weightSum="1" > 

<ListView 
    android:id="@+id/mtg_attachments" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" /> 

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

    <Button 
     android:id="@+id/attach_delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="delete" 
     android:textSize="22sp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="attach_warning" 
     android:textSize="18sp" /> 
</LinearLayout> 

</LinearLayout> 
+0

Не работает либо ... – Sriman

+0

Но Шримэн отлично работает на моем конце.если это не ваше решение, что вы хотите, пожалуйста, уточните еще –

+0

Вы пытались запустить его на устройстве или эмуляторе. Графический макет на eclipse будет выглядеть нормально, но на самом деле он не работает точно так же на устройстве. Как я уже сказал, я использую Google Nexus 7 с Jelly Bean 4.1.2. Ваша среда может быть другой ... – Sriman

0

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

Просто поместите LinearLayout (vertical) с layout:weight = 1 между двумя элементами, которые вы хотите разделить.

В своем коде, который был бы

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/attachments_list" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:weightSum="1" 
       android:orientation="vertical"> 
    <ListView 
     android:id="@+id/mtg_attachments" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0" /> 

    <LinearLayout 
     <!-- You should add this one and remove android:layout_weigth="1" form the listview --> 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"> 
    </LinearLayout> 

    <Button 
     android:id="@+id/attach_delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/delete" 
     android:textSize="22sp" /> 
    <TextView 
     android:text="@string/attach_warning" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="18sp" /> 

</LinearLayout> 

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

+0

Не уверен, что это сработает ... Линейный макет займет все пространство, и в списке не будет ничего ... Я попробую, когда я получу шанс ... – Sriman

+0

Он начнется именно так. Но представление списка предназначено для содержания элементов, и этот список будет расширяться по мере добавления элементов (вам не нужно доверять мне, попробуйте сами). Единственная проблема заключается в том, что кнопка и TextView будут в нижней части экрана, и когда список коснется их, они будут сдвинуты вниз, и они будут недоступны, но вы можете обернуть что-нибудь внутри ScrollView, чтобы избежать что :) – doplumi

+0

Вы никогда не должны размещать список в прокрутке. – Sriman

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