Платформа Android с помощью ListView и кнопок

Хорошо, этот конкретный макет меня просто раздражает. И, похоже, не может найти способ иметь listView с рядом кнопок внизу, чтобы список не распространялся поверх кнопок, поэтому кнопки всегда привязываются к нижней части экрана. Вот что я хочу:

Удалена мертвая ссылка ImageShack

Похоже, это должно быть так просто, но все, что я пробовал, потерпело неудачу. Любая помощь?

Вот мой текущий код:

RelativeLayout container = new RelativeLayout(this); container.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); //** Add LinearLayout with button(s) LinearLayout buttons = new LinearLayout(this); RelativeLayout.LayoutParams bottomNavParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); bottomNavParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); bottomNavParams.addRule(RelativeLayout.CENTER_HORIZONTAL); buttons.setLayoutParams(bottomNavParams); ImageButton newLayer = new ImageButton(this); newLayer.setImageResource(R.drawable.newlayer); newLayer.setLayoutParams(new LinearLayout.LayoutParams(45, LayoutParams.FILL_PARENT)); buttons.addView(newLayer); container.addView(buttons); //** Add ListView layerview = new ListView(this); RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); listParams.addRule(RelativeLayout.ABOVE, buttons.getId()); layerview.setLayoutParams(listParams); container.addView(layerview); 

Solutions Collecting From Web of "Платформа Android с помощью ListView и кнопок"

Я думаю, что это то, что вы ищете.

 <?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"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/testbutton" android:text="@string/hello" android:layout_alignParentBottom="true" /> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/list" android:layout_alignParentTop="true" android:layout_above="@id/testbutton" /> </RelativeLayout> 

У меня была такая же проблема на века.

Решение сохранить ListView над кнопками, но не позволяя ему покрывать их, когда список длинный, заключается в установке android: layout_weight = "1.0" в ListView. Оставьте layout_weight на кнопках не установленными, чтобы они оставались в натуральном размере, иначе кнопки будут масштабироваться. Это работает с LinearLayout.

В Android ApiDemos есть пример: ApiDemos / res / layout / linear_layout_9.xml

Я просто искал ответ на этот вопрос, и это был один из первых результатов. Я чувствую, что все ответы, в том числе тот, который в настоящее время выбран как «лучший ответ», не затрагивают вопрос, о котором идет речь. Проблема заключается в том, что существует перекрытие двух компонентов Button и ListView в том, что ListView занимает весь экран, и кнопка визуально плавает над (перед) ListView (блокируя представление / доступ к Последний элемент в ListView )

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

Первоначально у меня было:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF394952"> <ListView android:id="@+id/game_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" style="@android:style/ButtonBar"> <Button android:id="@+id/new_game" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/new_game" android:textColor="#FFFFFFFF" android:background="@drawable/button_background" /> </LinearLayout> </RelativeLayout> 

Обратите внимание на использование RelativeLayout в качестве корневого узла.

Это конечная рабочая версия, в которой кнопка не перекрывает ListView :

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF394952"> <ListView android:id="@+id/game_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_weight="1.0" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" style="@android:style/ButtonBar"> <Button android:id="@+id/new_game" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/new_game" android:textColor="#FFFFFFFF" android:background="@drawable/button_background" /> </LinearLayout> </LinearLayout> 

Есть только две отличия. Во-первых, я переключился на использование LinearLayout . Это поможет в следующем бит, который добавлял android:layout_weight в мой ListView

Надеюсь, это поможет.

Лучший способ – относительный макет, который устанавливает кнопки под списком. В этом примере кнопки также находятся в линейной компоновке, потому что их проще разместить рядом с равным размером.

 <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/ListView01" android:layout_alignParentTop="true" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ListView> <LinearLayout android:id="@+id/LinearLayout01" android:layout_below="@+id/ListView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <Button android:id="@+id/ButtonJoin" android:text="Join" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:layout_alignParentBottom="true"> </Button> <Button android:id="@+id/ButtonJoin" android:layout_alignRight="@id/ButtonCancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel" android:layout_alignParentBottom="true"> </Button> </LinearLayout> </RelativeLayout> 

Я знаю, что этот пост довольно старый, но, чтобы ответить на вопрос оригинального плаката, причина, по которой код не работал, – buttons.getId () возвращает -1. Если вы собираетесь это сделать, вам нужно установить что-то вроде call buttons.setId (10). Если вы это сделаете, код работает нормально.

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

 <LinearLayout> main container // vertical <LinearLayout> scrollview must be contained in a linear layout //vertical - height to fill parent <ScrollView> set the height of this to fill parent <ListView> will be contained in the scrollview </ListView> </ScrollView> </LinearLayout> <LinearLayout> //horizontal - height to wrap content <Button> </Button> </LinearLayout> </LinearLayout> 

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