Eu sei que podemos definir os seguintes valores para as propriedades android:gravity
e android:layout_gravity
:
center
center_vertical
center_horizontal
etc.
Mas estou confuso em relação a ambos.
Qual é a diferença entre o uso de android:gravity
e android:layout_gravity
?
android
android-layout
android-gravity
Paresh Mayani
fonte
fonte
ImageView
parecem se comportar diferentesTextView
dos.Respostas:
Os nomes deles devem ajudá-lo:
android:gravity
define a gravidade do conteúdo (ou seja, suas subvisões) dosView
quais é usado.android:layout_gravity
define a gravidade deView
ou emLayout
relação ao seu pai.E um exemplo está aqui .
fonte
layout_
define algo que afeta os elementos externos.android:gravity
está definido para a esquerda e os filhosandroid:layout_gravity
estão definidos para a direita? de que lado as crianças se alinham?Dentro fora
gravity
organiza o conteúdo dentro da visualização.layout_gravity
organiza a posição da vista fora de si mesma.Às vezes, também ajuda ver uma foto. O verde e o azul são
TextViews
e as outras duas cores de fundo sãoLinearLayouts
.Notas
layout_gravity
não funciona para visualizações em aRelativeLayout
. Use-o para visualizações em umLinearLayout
ouFrameLayout
. Veja minha resposta suplementar para mais detalhes.gravity
, não terá nenhum efeito. Assim,wrap_content
egravity
são sem sentido juntos.layout_gravity
, não terá nenhum efeito. Assim,match_parent
elayout_gravity
são sem sentido juntos.layout_gravity=center
parece o mesmo quelayout_gravity=center_horizontal
aqui, porque eles estão em um layout linear vertical. Você não pode centralizar verticalmente neste caso, portanto,layout_gravity=center
centralize apenas horizontalmente.gravity
elayout_gravity
das visualizações em um layout. Para ver o que acontece quando você define ogravity
próprio layout pai, confira a resposta complementar a que me referi acima. (Resumo:gravity
não funciona bem em um,RelativeLayout
mas pode ser útil em umLinearLayout
.)Lembre-se, o layout _gravity organiza uma exibição em seu layout . A gravidade organiza o conteúdo dentro da visualização.
xml
Aqui está o xml da imagem acima para sua referência:
Relacionado
fonte
A diferença
android:layout_gravity
é a gravidade externa da vista. Especifica a direção na qual a Visualização deve tocar na borda de seus pais.android:gravity
é a gravidade interna dessa vista. Especifica em qual direção seu conteúdo deve se alinhar.Equivalentes HTML / CSS
Truque fácil para ajudar você a se lembrar
Tome
layout-gravity
como "Lay-outside-gravity".fonte
Resposta curta: use
android:gravity
ousetGravity()
para controlar a gravidade de todas as visualizações filho de um contêiner; useandroid:layout_gravity
ousetLayoutParams()
para controlar a gravidade de uma vista individual em um contêiner.Longa história: para controlar a gravidade em um contêiner de layout linear, como
LinearLayout
ouRadioGroup
, existem duas abordagens:1) Para controlar a gravidade de TODAS as visualizações filho de um
LinearLayout
contêiner (como você fez no seu livro), useandroid:gravity
(nãoandroid:layout_gravity
) no arquivo XML de layout ousetGravity()
método no código.2) Para controlar a gravidade de uma visão filho em seu contêiner, use o
android:layout_gravity
atributo XML. No código, é preciso obterLinearLayout.LayoutParams
a visão e definir sua gravidade. Aqui está um exemplo de código que define um botão para baixo em um contêiner horizontalmente orientado:Para
LinearLayout
contêiner horizontal , a gravidade horizontal de sua exibição filho é alinhada à esquerda uma após a outra e não pode ser alterada. Definirandroid:layout_gravity
paracenter_horizontal
não tem efeito. A gravidade vertical padrão é o centro (ou central_vertical) e pode ser alterada para cima ou para baixo. Na verdade, olayout_gravity
valor padrão é,-1
mas o Android coloca-o no centro verticalmente.Para alterar as posições horizontais das vistas filho em um contêiner linear horizontal, pode-se usar a
layout_weight
margem e o preenchimento da vista filho.Da mesma forma, para o contêiner vertical do Grupo de vistas, a gravidade vertical da vista secundária é alinhada superiormente abaixo da outra e não pode ser alterada. A gravidade horizontal padrão é o centro (ou
center_horizontal
) e pode ser alterada para esquerda ou direita.Na verdade, uma exibição filho como um botão também possui
android:gravity
atributo XML e osetGravity()
método para controlar suas exibições filho - o texto nele. OButton.setGravity(int)
está vinculado a esta entrada developer.android.com .fonte
Pelo que posso entender, layout_gravity é a gravidade dessa visão dentro de seu pai, e a gravidade é a gravidade das crianças dentro dessa visão.
Eu acho que isso é certo, mas a melhor maneira de descobrir é brincar.
fonte
Veja a imagem para ter uma ideia clara da gravidade
fonte
Se queremos definir a gravidade do conteúdo dentro de uma visualização, usaremos "android: gravity" e, se desejarmos definir a gravidade dessa visualização (como um todo) dentro da visualização pai, usaremos "android: layout_gravity ".
fonte
Apenas pensei em adicionar minha própria explicação aqui - vindo de um background no iOS, foi assim que internalizei os dois em termos do iOS: "Layout Gravity" afeta sua posição na superview. "Gravidade" afeta a posição de suas subvisões dentro de você. Dito de outra forma, o Layout Gravity posiciona você mesmo enquanto a gravidade posiciona seus filhos.
fonte
Há muitas diferenças no
gravity
elayout-gravity
. Vou explicar minha experiência sobre esses dois conceitos ( todas as informações que recebi devido à minha observação e alguns sites ).Nota:-
A gravidade é usada dentro do Exibir conteúdo, pois alguns usuários têm respostas e é o mesmo para todos
ViewGroup Layout
.Layout-gravity
é usado com a tela pai, pois alguns usuários têm resposta.Gravity and Layout-gravity
é um trabalho mais útil com asFrameLayout
crianças.We can't use Gravity and Layout-gravity
na tag FrameLayout ....Podemos definir o Child View em qualquer lugar no
FrameLayout
usolayout-gravity
.Podemos usar cada valor único de gravidade dentro do FrameLayout (por exemplo: -
center_vertical
,center_horizontal
,center
,top
, etc), mas não é possível com outros Layouts ViewGroup.FrameLayout
totalmente trabalhandoLayout-gravity
. Exemplo: - Se você trabalhaFrameLayout
, não precisa alterar o Layout inteiro para adicionar uma nova Visualização. Você apenas adiciona View como último noFrameLayout
e fornece a eleLayout-gravity
valor ( isso é uma vantagem da gravidade do layout com o FrameLayout ).Resultado:-
Gravity
funcionando da mesma maneira que acima, mas aqui a diferença é que podemos usar a Gravidade dentro daLinearLayout View
eRelativeLayout View
que não é possívelFrameLayout View
.Nota: - Aqui podemos definir apenas 3 valores
layout_gravity
desse valor (left
|right
|center
(também chamadocenter_horizontal
)).Resultado:-
Nota: - Aqui também podemos definir 3 valores
layout_gravity
desse valor (top
|bottom
|center
(também chamadocenter_vertical
)).resultado:-
Nota: - Não podemos usar
layout_gravity
oRelativeLayout Views
mas podemos usargravity
para definir osRelativeLayout
filhos na mesma posição ....fonte
textColor
branco em tudo,view
então seria muito bom. : DUm truque fácil de lembrar é que a gravidade se aplica a nós dentro da terra. Então,
android:gravity
é para dentro da vista.Lembre-se do out in lay out _gravity que ajudaria você a lembrar que
android:layout_gravity
se referiria a fora da vistafonte
Algo que vi no blog de Sandip que quase perdi, corrigiu meu problema. Ele disse:
layout_gravity
NÃO TRABALHA COMLinearLayout
.Se você estiver usando um
LinearLayout
e as configurações de gravidade o deixarem louco (como eu), mude para outra coisa.Na verdade, eu mudei para um
RelativeLayout
então usadolayout_alignParentLeft
elayout_alignParentRight
nos 2TextView
s contidos para colocá-los em uma linha para ir à esquerda e à direita.fonte
A diferença básica entre os dois é que
android: gravidade é usada para elementos filhos da vista.
android: layout_gravity é usado para este elemento em relação à visualização principal.
fonte
android:gravity
é usado para especificar como colocar o conteúdo do objeto dentro do próprio objeto. Em outra palavra, android: gravity é usado para especificar a gravidade do conteúdo da visualização.android:layout_gravity
é uma atribuição que a criança pode fornecer a seus pais, para especificar a gravidade da visualização dentro de seus pais.Para mais detalhes você pode visitar
fonte
Gravidade: permite mover o conteúdo dentro de um contêiner. (Como as sub-visualizações serão colocadas).
Importante: (MOVE-SE no eixo X ou Y no espaço disponível).
Exemplo: Digamos que se você trabalha com LinearLayout (Altura: match_parent, Largura: match_parent) como elemento de nível raiz, então você terá espaço de quadro completo disponível; e as visualizações filho dizem que 2 TextViews (Altura: wrap_content, Largura: wrap_content) dentro do LinearLayout podem ser movidos ao longo do eixo x / y usando os valores correspondentes para a gravidade no pai.
Layout_Gravity: permite substituir SOMENTE o comportamento da gravidade pai ao longo do eixo x.
Importante: (MOVER [substituir] ao longo do eixo X no espaço disponível).
Exemplo: se você se lembrar do exemplo anterior, sabemos que a gravidade nos permitiu mover-se ao longo do eixo x / y, ou seja; o lugar TextViews dentro de LinearLayout. Digamos apenas que LinearLayout especifique gravidade: center; ou seja, todo TextView precisa estar centralizado tanto na vertical quanto na horizontal. Agora, se quisermos que um dos TextView vá para esquerda / direita, podemos substituir o comportamento da gravidade especificado usando layout_gravity no TextView.
Bônus: se você se aprofundar, descobrirá que o texto no TextView atua como sub-visualização; portanto, se você aplicar a gravidade no TextView, o texto dentro do TextView se moverá. (todo o conceito se aplica aqui também)
fonte
Gravidade é usada para definir o alinhamento do texto nas visualizações, mas layout_gravity é usado para definir as visualizações por si próprio. Vamos dar um exemplo, se você deseja alinhar o texto escrito em editText, use a gravidade e você deseja alinhar este editText ou qualquer botão ou qualquer visualização e, em seguida, use layout_gravity. Portanto, é muito simples.
fonte
gravidade : é usado para visualizações simples como textview, edittext etc.
layout_gravity : é usado para a gravidade atual da vista atual apenas no contexto de sua vista pai relativa, como Layout linear ou FrameLayout, para tornar a vista no centro ou qualquer outra gravidade do pai.
fonte
é usado para ajustar o conteúdo da visualização em relação à sua posição especificada (área alocada).
android:gravity="left"
não faria nada selayout_width
for igual ao"wrap_content"
é usado para se visualizar em relação ao arquivo pai ou layout.
fonte
android:gravity
-> Define a gravidade do conteúdo da tela em que é usado.android:layout_gravity
-> Define a gravidade da visualização ou layout dos paisfonte
gravidade - aplica-se a sua própria visão.
layout-gravity --- Aplica-se à visualização relacionada ao seu pai.
fonte
O
android:gravity
define a gravidade (posição) das crianças, enquanto oandroid:layout_gravity
define a posição da própria visão. Espero que ajudefonte