Eu sempre leio sobre esse valor de peso engraçado nas documentações do Android. Agora quero experimentá-lo pela primeira vez, mas não está funcionando.
Pelo que entendi das documentações deste layout:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
</LinearLayout>
deve criar dois botões alinhados horizontalmente e compartilhar o espaço igualmente. O problema é que os dois botões não crescem para preencher o espaço.
Eu gostaria que os botões crescessem e preenchessem toda a linha. Se os dois botões estiverem configurados para corresponder aos pais, apenas o primeiro botão será exibido e preencherá a linha inteira.
Respostas:
Você não está definindo a
layout_weight
propriedade. Seu código lêweight="1"
e deve lerandroid:layout_weight="1"
.fonte
3 coisas para lembrar:
Exemplo:
E o resultado:
fonte
addView(button, new LinearLayout.LayoutParams(0, height, 1));
Isso é verdade mesmo se você estiver inflando layouts com os valores corretos de largura e peso.É
android:layout_weight
. O peso só pode ser usado emLinearLayout
. Se a orientação do layout linear for Vertical, useandroid:layout_height="0dp"
e, se a orientação for horizontal, useandroid:layout_width = "0dp"
. Funcionará perfeitamente.fonte
Esta imagem resume o layout linear.
Você pode seguir este link para obter mais informações sobre o tópico. Just Maths - visualizações, visualizar grupos e layouts
Tutorial em vídeo para layout linear: largura, altura e pesos
Tutorial de layout linear para Android
fonte
Tente definir os
layout_width
dois botões para "0dip" e osweight
dois botões para0.5
fonte
O LinearLayout suporta a atribuição de um peso a filhos individuais. Este atributo atribui um valor de " importância " a uma visualização e permite a expansão para preencher qualquer espaço restante na visualização pai. O peso padrão é zero
cálculo para atribuir qualquer espaço restante / extra entre filhos. (não o espaço total)
espaço atribuído à criança = (peso individual da criança) / (soma do peso de cada criança no Layout Linear)
Exemplo (1): se houver três caixas de texto e duas declararem peso 1, enquanto a terceira não tiver peso (0), o espaço restante / extra será atribuído a
Exemplo (2) : digamos que temos um rótulo de texto e dois elementos de edição de texto em uma linha horizontal. O rótulo não possui layout_weight especificado, portanto, ocupa o espaço mínimo necessário para renderizar. Se o layout_weight de cada um dos dois elementos de edição de texto estiver definido como 1, a largura restante no layout pai será dividida igualmente entre eles (porque alegamos que são igualmente importantes).
Se a primeira caixa de texto tiver um layout_weight de 1 e a segunda caixa de texto tiver um layout_weight de 2, um terço do espaço restante será atribuído à primeira e dois terços ao segundo (porque afirmamos que a segunda é mais importante).
fonte
No campo largura do botão, substitua
wrap-content
por0dp
.Use o atributo layout_weight de uma visualização.
É assim que seu código ficará:
layout_weight é usado para distribuir o espaço restante em proporções. Nesse caso, os dois botões estão usando a largura "0dp". Portanto, o espaço restante será dividido em uma proporção de 1: 1 entre eles, ou seja, o espaço será dividido igualmente entre as vistas de botão.
fonte
Como resposta de @Manoj Seelan
Substituir
android:layout_weight
Comandroid:weight
.Quando você usa Peso com
LinearLayout
. você deve adicionarweightSum
emLinearLayout
e de acordo com a orientação do seuLinearLayout
você deve definir0dp
para largura / altura a todosLinearLayout
`s vistas CriançasExemplo:
Se a orientação de
Linearlayout
forVertical
, defina a largura de todasLinearLayout
as visualizações filhos com0dp
Se a orientação
Linearlayout
de forhorizontal
, Defina a altura de todasLinearLayout
as visualizações filhos com0dp
.fonte
Talvez definir as duas propriedades de layout_width dos botões como "fill_parent" ajude.
Acabei de testar esse código e ele funciona no emulador:
Defina layout_width como "fill_parent" nos dois botões.
fonte
fonte
No XML acima, defina o
android:layout_weight
layout linear como2
:android:layout_weight="2"
fonte
Além disso, você precisa adicionar isso
android:layout_width="0dp"
para visualizações de crianças [visualizações de botão] deLinerLayout
fonte
Você tem que escrever assim está trabalhando pra mim
fonte
Abaixo estão as alterações (marcadas em negrito ) no seu código:
Como o LinearLayout tem orientação na horizontal, você precisará manter a largura apenas como 0dp. para usar pesos nessa direção. (Se sua orientação fosse vertical, você manteria sua altura apenas 0dp) .
Como existem duas visualizações e você as colocou
android:layout_weight="1"
nas duas, significa que as duas serão divididas igualmente na direção horizontal (ou pela largura).fonte
fonte
Esta é a resposta perfeita do seu problema
fonte
Substitua
wrap_content
porfill_parent
.fonte
fonte