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);
7 ответов:
Я думаю, что это то, что вы ищете.
<?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 на кнопках неустановленными, чтобы они оставались в своем естественном размере, иначе кнопки будут масштабироваться. Это работает с макетом.
есть пример в 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>
Я знаю, что этот пост довольно старый, но, чтобы ответить на вопрос автора первоначального, почему код не работает, была кнопки.getId() возвращает -1. Если вы собираетесь это сделать, вам нужно установить что-то вроде кнопок вызова.setId(10). Если вы это сделаете, код работает просто отлично.
это должно работать. чтобы иметь кнопки над listview тоже, поместите кнопки внутри другого линейного макета.
<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>
самым простым решением было бы создать два линейных макета, один с кнопкой, а другой с представлением списка(обернуть содержимое по высоте кнопки и сопоставить родительский элемент по высоте макета списка). затем только сделайте вид прокрутки над макетом со списком, и макет кнопки будет проигнорирован. надеюсь, это поможет, извините, что я не хотел писать код.
Comments