Minha pergunta é simples,
Como definir meus botões layout_gravity programaticamente?
Encontrei isso na internet, mas isso simplesmente me lança uma exceção do Nullpointer:
Button MyButton = new Button(this);
LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
lllp.gravity=Gravity.RIGHT;
MyButton.setLayoutParams(lllp);
MyLinearLayout.addView(MyButton);
Qualquer solução?
android
android-layout
Adam Varhegyi
fonte
fonte
Respostas:
Java
Kotlin
Para valores de gravidade e como definir a gravidade, verifique Gravidade .
Basicamente, você deve escolher o que
LayoutParams
depende do pai. Pode serRelativeLayout
,LinearLayout
etc ...fonte
layout_gravity
(isto éLayoutParams.gravity
). Ogravity
que seria #button.setGravity()
setGravity()
é o layout_gravity, mas isso está errado. Posso aprovar que esta resposta está correta para definir layout_gravity programaticamente.Eu odiaria ressuscitar threads antigos, mas esse é um problema que não foi respondido corretamente e, além disso, eu mesmo me deparei com esse problema.
Aqui está o passo longo, se você estiver interessado apenas na resposta, role até o código:
android: gravidade e android: layout_gravity funciona de maneira diferente. Aqui está um artigo que li que me ajudou.
GIST do artigo: a gravidade afeta a vista depois que a altura / largura é atribuída. Portanto, o centro de gravidade não afetará uma exibição concluída FILL_PARENT (pense nela como margem automática). O layout_gravity center afetará a exibição que é FILL_PARENT (pense nela como auto pad).
Basicamente, android: layout_gravity NÃO PODE ter acesso programaticamente, apenas android: gravidade. No caso do OP e no meu caso, a resposta aceita não coloca o botão verticalmente no centro.
Para melhorar a resposta de Karthi:
Link para
LinearLayout.LayoutParams
.android: layout_gravity mostra o significado "Nenhum método relacionado" não pode ser acessado programaticamente. Considerando que a gravidade é um campo na classe.
fonte
Para layout_gravity, use a resposta indicada por "karthi". Este método define a gravidade para colocar as crianças dentro da vista.
fonte
Eu tive um problema semelhante ao definir programaticamente layout_gravity nos botões em um GridLayout.
O truque era definir a gravidade no layout do botãoParams APÓS o botão ser adicionado a um pai (GridLayout), caso contrário , a gravidade seria ignorada .
fonte
Se você deseja alterar a
layou_gravity
visualização existente, faça o seguinte:Lembre-se de usar o direito com
LayoutParams
base no tipo de layout em que está sua exibição. Ex:fonte
use isso para adicionar mais de uma gravidade
fonte
Esta pergunta é antiga, mas eu apenas tive o mesmo problema e resolvi-o assim
fonte
KOTLIN configurando mais de uma gravidade no FrameLayout sem alterar o tamanho:
fonte
Eu uso algo assim: (código Xamarin e C #)
o SetGravity coloca meu textView no centro do layout. Portanto, a propriedade de layout SetGravity se refere ao conteúdo do layout
fonte
Caso você precise definir Gravidade para uma Visualização, use o seguinte
Para definir layout_gravity para o Button, use o campo gravidade para os layoutparams como
tente esta esperança isso limpa graças
fonte
O restante das respostas está correto, quero acrescentar mais explicações. O layout_gravity é sobre como posicionar a vista na vista pai.
Você deve definir a gravidade ** após o método parentView.addView () ** ser chamado. Podemos ver o código:
E o problema do ponteiro nulo é porque ele não está chamando addView antes de getLayoutParams ().
A anotação já foi declarada "Este método pode retornar nulo se este View não estiver anexado a um ViewGroup pai ou {@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)} não foi chamado com êxito. Quando um View é anexado a um pai ViewGroup, esse método não deve retornar nulo. "
fonte
Se você deseja colocar uma visão no centro dos pais, pode fazer o seguinte código.
essa seção de código faz com que o LinearLayout coloque os primeiros elementos de exibição no centro do pai. Portanto, o sistema não considera a largura inicial e a altura altas para organizar a vista no centro. Eu faço a seção de código também.
fonte
para RelativeLayout, tente este código, ele funciona para mim:
yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
fonte
Perfeitamente trabalhando !!! Nenhuma das respostas acima funciona para mim. No arquivo XML, a configuração gravidade e a configuração layout_gravity são diferentes. Confira o código abaixo
Verifique também Isto, onde você pode encontrar explicações claras sobre gravidade e layout_gravity.
fonte
A maioria das respostas acima está correta, então escreva um método auxiliar, para que você possa usá-lo diretamente em seu projeto.
fonte
Mudei de LinearLayout.LayoutParams para RelativeLayout.LayoutParams para finalmente obter o resultado que eu estava desejando em uma revisão de círculo personalizada que criei.
Mas, em vez de gravidade, você usa addRule
RelativeLayout.LayoutParams mCircleParams = new RelativeLayout.LayoutParams (altura do círculo, altura do círculo);
fonte
Experimente este código
ou
fonte
layout_gravity
nãogravitiy
.fonte
fonte