Хорошо, этот конкретный макет меня просто раздражает. И, похоже, не могу найти способ иметь 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);
Ответы:
Я думаю, это то, что вы ищете.
источник
android:layout_above="@id/testbutton"
сохранитListView
вышеуказанноеButton
.addRule(RelativeLayout.ABOVE)
наRelativeLayout
, либо. Вы называете это наRelativeLayout.LayoutParams
. Затем вы добавляетеListView
вRelativeLayout
, предоставляя этоRelativeLayout.LayoutParams
. Пожалуйста, подумайте о переходе на XML и его расширении для долгосрочной поддержки.У меня была одна и та же проблема целую вечность.
Решение сохранить ListView над кнопками, но не позволять им закрывать их, когда список длинный, - это установить android: layout_weight = "1.0" в ListView. Не устанавливайте layout_weight на кнопках, чтобы они оставались в своем естественном размере, иначе кнопки будут масштабироваться. Это работает с LinearLayout.
В Android ApiDemos есть пример: ApiDemos / res / layout / linear_layout_9.xml
источник
Я просто искал ответ на этот вопрос, и это был один из первых результатов. Мне кажется, что все ответы, включая тот, который в настоящее время выбран как «лучший ответ», не касаются обсуждаемой проблемы. Заявленная проблема заключается в том, что существует перекрытие двух компонентов
Button
иListView
что ListView занимает весь экран, а кнопка визуально плавает над (перед) ListView (блокирует просмотр / доступ к последнему пункт вListView
)Основываясь на ответах, которые я видел здесь и на других форумах, я наконец пришел к выводу, как решить эту проблему.
Изначально у меня было:
Обратите внимание на использование в
RelativeLayout
качестве корневого узла.Это последняя рабочая версия, в которой кнопка не перекрывает
ListView
:Есть только два отличия. Во-первых, я перешел на использование
LinearLayout
. Это поможет со следующим фрагментом, который добавлялandroid:layout_weight
к моемуListView
Надеюсь, это поможет.
источник
android:layout_alignParentBottom
внутриLinearLayout
родителя, ADT сообщает: «Недопустимый параметр макета в LinearLayout: layout_alignParentBottom»!Наилучший способ - это относительный макет, при котором кнопки располагаются под списком. В этом примере кнопки также имеют линейную компоновку, потому что их легче разместить рядом с равным размером.
источник
Я знаю, что этот пост довольно старый, но, чтобы ответить на вопрос исходного автора, причиной того, что код не работал, были кнопки. GetId () возвращает -1. Если вы собираетесь это сделать, вам нужно установить что-нибудь вроде call buttons.setId (10). Если вы это сделаете, код будет работать нормально.
источник
это должно работать. чтобы кнопки были и над списком, поместите кнопки внутри другого линейного макета.
источник
Самым простым решением было бы создать два линейных макета, один с кнопкой, а другой с представлением списка (обернуть содержимое по высоте кнопки и сопоставить родительский по высоте макета списка). тогда только сделайте вид прокрутки по макету с видом списка, и макет кнопки будет проигнорирован. Надеюсь, это поможет, извините, я не хотел писать код.
источник