Como posso definir o valor do atributo layout_weight
for button no android dinamicamente a partir do código java?
244
Como posso definir o valor do atributo layout_weight
for button no android dinamicamente a partir do código java?
Respostas:
Você pode transmiti-lo como parte do
LinearLayout.LayoutParams
construtor:O último parâmetro é o peso.
fonte
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1f
se não houver casas decimaisRelative
Use
LinearLayout.LayoutParams
:EDIT: Ah, a resposta de Erich é mais fácil!
fonte
FILL_PARENT
foi descontinuado eMATCH_PARENT
deve ser usado.MATCH_PARENT
pode ser usado em vez deFILL_PARENT
dispositivos antigos.FILL_PARENT
vs.MATCH_PARENT
.Se você já define sua visualização no arquivo de layout (xml), deseja alterar apenas o peso programaticamente, é melhor assim
novo um LayoutParams substitui outros parâmetros definidos no arquivo xml, como margens, ou você precisa especificar todos eles em LayoutParams.
fonte
Se o construtor com largura, altura e peso não estiver funcionando, tente usar o construtor com largura e altura. E depois defina manualmente o peso.
E se você quiser que a largura seja definida de acordo com o peso, defina a largura como 0 no construtor. O mesmo se aplica à altura. O código abaixo funciona para mim.
fonte
Se alguém procurando resposta, use o seguinte:
Se você estiver inicializando seu layout a partir do arquivo xml, isso será muito mais conveniente do que fornecer novos parâmetros de layout para o Layout Linear.
fonte
layout_weight
já estiver definida, você precisará ligarView.requestLayout()
para atualizar.Qualquer um
LinearLayout.LayoutParams
eTableLayout.LayoutParams
funcionou para mim, para botões é o certoTableRow.LayoutParams
. Isso é:Sobre o uso
MATCH_PARENT
ouWRAP_CONTENT
seja o mesmo.fonte
FILL_PARENT
foi descontinuado eMATCH_PARENT
deve ser usado.LayoutParams
pai direto. Suponho que você teve uma falha ao tentar usarLinearLayout.LayoutParams
sem o paiLinearLayout
.Se você já definiu sua exibição no arquivo de layout (xml) e apenas deseja alterar o peso de forma programática, a criação de novos LayoutParams substitui outros parâmetros definidos no arquivo xml.
Então, primeiro você deve usar "getLayoutParams" e depois setLayoutParams
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams(); params.weight = 4f; mButton.setLayoutParams(params);
fonte
Se
layoutparams
já estiver definido (em XML ou dinamicamente), aqui está uma lista:fonte
Usando o Kotlin, você pode fazer algo como:
fonte