Tudo bem, esse layout específico está apenas me irritando. E não consigo encontrar uma maneira de ter um listView, com uma fileira de botões na parte inferior para que o listview não se estenda por cima dos botões e, portanto, os botões estão sempre ajustados para a parte inferior da tela. Aqui está o que eu quero:
link morto do ImageShack removido
Parece que deveria ser tão fácil, mas tudo o que tentei falhou. Qualquer ajuda?
Este é meu código atual:
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);
Respostas:
Eu acho que isto é o que você está procurando.
fonte
android:layout_above="@id/testbutton"
manterá oListView
acima doButton
.addRule(RelativeLayout.ABOVE)
umRelativeLayout
. Você chama em aRelativeLayout.LayoutParams
. Você então adiciona oListView
aoRelativeLayout
, fornecendo-oRelativeLayout.LayoutParams
. Considere mudar para XML e aumentá-lo, para manutenção de longo prazo.Eu tive o mesmo problema por muito tempo.
A solução para manter o ListView acima dos botões, mas evitando que ele os cubra quando a lista for longa, é definir android: layout_weight = "1.0" no ListView. Deixe o layout_weight nos botões não definido para que eles permaneçam em seu tamanho natural, caso contrário, os botões serão redimensionados. Isso funciona com LinearLayout.
Há um exemplo no Android ApiDemos: ApiDemos / res / layout / linear_layout_9.xml
fonte
Eu estava apenas procurando uma resposta para essa pergunta e esse foi um dos primeiros resultados. Sinto como se todas as respostas, incluindo aquela que é atualmente escolhida como a "melhor resposta", não abordassem o problema que está sendo perguntado. O problema que está sendo declarado é que há uma sobreposição dos dois componentes
Button
eListView
em que o ListView está ocupando a tela inteira, e o botão está visualmente flutuando acima (na frente) do ListView (bloqueando a visualização / acesso do último item noListView
)Com base nas respostas que vi aqui e em outros fóruns, finalmente cheguei a uma conclusão sobre como resolver isso.
Originalmente, eu tinha:
Observe o uso de
RelativeLayout
como o nó raiz.Esta é a versão final de trabalho na qual o botão não se sobrepõe a
ListView
:Existem apenas duas diferenças. Primeiro, mudei para usar um
LinearLayout
. Isso vai ajudar com a próxima parte, que foi adicionarandroid:layout_weight
ao meuListView
Eu espero que isso ajude.
fonte
android:layout_alignParentBottom
dentro de umLinearLayout
pai, o ADT diz "Parâmetro de layout inválido em um LinearLayout: layout_alignParentBottom"!A melhor maneira é um layout relativo que define os botões abaixo da lista. Neste exemplo, os botões também estão em um layout linear porque é mais fácil colocá-los lado a lado em um tamanho igual.
fonte
Eu sei que este post é um pouco antigo, mas, para responder à pergunta do autor original, o motivo pelo qual o código não funcionou foi buttons.getId () retorna -1. Se você vai fazer isso, você precisa definir fazer algo como call buttons.setId (10). Se você fizer isso, o código funcionará perfeitamente.
fonte
isso deve funcionar. para ter botões acima do listview também, coloque os botões dentro de outro layout linear.
fonte
a solução mais fácil seria criar dois layouts lineares, um com o botão e outro com a exibição de lista (envolver o conteúdo na altura do botão e combinar o pai na altura do layout da lista). em seguida, faça apenas uma visualização de rolagem sobre o layout com a visualização de lista e o layout dos botões será ignorado. espero que ajude, desculpe, eu não tive vontade de escrever o código.
fonte