Android

Android Layout with ListView and Buttons

Макет Android с ListView и кнопками

Хорошо, этот конкретный макет меня просто раздражает. И, похоже, не могу найти способ создать 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);
Переведено автоматически
Ответ 1

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

<?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>
Ответ 2

У меня была одна и та же проблема целую вечность.

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

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

Ответ 3

Я просто искал ответ на этот вопрос, и это был один из первых результатов. Я чувствую, что все ответы, включая тот, который в данный момент выбран в качестве "лучшего ответа", не решают проблему, о которой спрашивают. Заявленная проблема заключается в том, что два компонента перекрываются 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

Я надеюсь, что это поможет.

Ответ 4

Лучший способ - это относительный макет, при котором кнопки располагаются под 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>
java android listview