Eu tenho um layout linear (orientado horizontalmente) que contém 3 botões. Quero que os 3 botões tenham uma largura fixa e sejam distribuídos uniformemente pela largura do layout linear.
Eu posso gerenciar isso definindo a gravidade do layout linear para o centro e depois ajustando o preenchimento dos botões, mas isso funciona para uma largura fixa e não para alterações de dispositivos ou orientações.
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:gravity="center">
<Button
android:id="@+id/btnOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnThree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
</LinearLayout>
android
android-linearlayout
yamspog
fonte
fonte
Respostas:
Expandindo resposta das fedj , se você definir
layout_width
a0dp
e definir olayout_weight
para cada um dos botões para 1, a largura disponível serão divididos igualmente entre os botões.fonte
Se você não deseja que os botões sejam redimensionados, mas ajuste o espaçamento entre os botões (espaçamento igual entre todos os botões), você pode usar vistas com peso = "1" que preencherá o espaço entre os botões:
fonte
Space
tipo de exibição. Torna as coisas um pouco mais legíveis.Você pode usá-lo da seguinte forma.
fonte
Space
até agoraVocê pode fazer isso dando tanto
View
salayout_width
da0dp
e umalayout_weight
de1
:A maneira como o android layout_weight funciona é:
match_parent
, ele dividirá o espaço restante na proporção delayout_weight
s. Portanto, se você deu as vistaslayout_weight="2"
elayout_weight="1"
, a proporção resultante será de 2 para 1, ou seja: a primeira vista receberá 2/3 do espaço restante e a outra vista 1/3.É por isso que, se você fornecer
layout_width
um tamanho da0dp
primeira etapa, não terá um significado adicional, já que os dois modos de exibição não receberão nenhum espaço. Então, apenas o segundo ponto decide o espaço que cada umView
obtém, dando aView
s o espaço especificado de acordo com a proporção!Para explicar por
0dp
que o espaço é dividido igualmente, fornecendo um exemplo que mostra o oposto: O código abaixo resultaria em algo diferente, poisexample text
agora tem uma largura maior do que0dp
porque, aowrap_content
invés disso, deixou o espaço livre para dividir menos de 100% porque o texto ocupa espaço. O resultado será que eles obterão 50% do espaço livre restante, mas o texto jáTextView
ocupará algum espaço, de modo que terá mais de 50% do espaço total.fonte
Bem, se você tiver exatamente 3 botões e se estiver ok (ou até planejado) que os botões externos estejam alinhados aos lados esquerdo e direito, convém tentar um RelativeLayout que seja menos sobrecarga (em muitas situações).
Você pode usar
layout_alignParentBottom
para alinhar todos os botões com a parte inferior do layout. Uselayout_alignParentLeft and Right
para os botões externos elayout_centerHorizontal
para o botão do meio.Isso funcionará bem em diferentes orientações e tamanhos de tela.
fonte
Você deve dar uma olhada no android: atributo layout_weight
fonte
A solução moderna para isso é o Flexbox .
Certifique-se de importar
implementation 'com.google.android:flexbox:2.0.0'
Flexbox
é muito mais poderoso; é um bom complemento paraConstraintLayout
. Este é um ótimo recurso para aprender mais.fonte
Para espaçar uniformemente dois botões em um layout linear horizontal, usei 3 objetos LinearLayout para atuar como espaços que serão redimensionados automaticamente. Posicionei esses objetos LinearLayout da seguinte maneira:
[] Botão1 [] Botão2 []
([] representa um objeto LinearLayout usado para espaçamento)
então defino o peso de cada um desses objetos [] LinearLayout como 1 e recebo botões espaçados igualmente.
Espero que isto ajude.
fonte
eu criei um View DistributeLayout personalizado para fazer isso.
fonte
Sugiro que você use o atributo weightSum de LinearLayout.
Adicionar a tag
android:weightSum="3"
à declaração xml do LinearLayout e, em seguida,android:layout_weight="1"
aos Buttons resultará na distribuição uniforme dos 3 botões.fonte
Isso pode ser conseguido atribuindo
weight
a cada botão adicionado dentro do contêiner, muito importante para definir a orientação horizontal:para que possamos obter isso em nosso dispositivo como resultado:
mesmo que rotacionemos nosso dispositivo, o
weight
definido em cada botão pode distribuir os elementos uniformemente ao longo do contêiner:fonte
A melhor abordagem é usar TableLayout com android: layout_width = "match_parent" e nas colunas usar android: layout_weight = "1" para todas as colunas
fonte
As respostas acima usando layout_d não funcionaram para mim, mas o seguinte funcionou.
É assim que fica na tela,
fonte
Acima de todas as respostas, as respostas estão corretas, mas, em um caso, você precisa de recursos visíveis e passados, esse método pragmaticamente funcionará bem
fonte
Crianças com o mesmo peso
Para que isso funcione no
LinearLayout
grupo de vistas, os valores dos atributosandroid:layout_width
eandroid:layout_height
precisam ser iguais a"match_parent"
...fonte
Em círculo, Tom, Tim e Todd assumem 3 centímetros. Se você quiser que seja uma tela de toque, coloque-o como Tom e Tim assumindo 1 centímetro, o que significa que eles combinam virtual, mas seu plano 2D está na parte inferior. Isso é exibido na tela.
fonte
fonte
A maneira mais fácil e rápida (mas não a melhor) é adicionar um TextView com atributo de texto vazio, como este
a cor do plano de fundo deve ser a mesma no LinearLayout, você pode usar a propriedade padding, como esta
ou o que você precisar. Aqui está um exemplo.
fonte