Este atributo pode ser alterado dinamicamente no código Java?
android:layout_marginRight
Eu tenho um TextView
, que tem que mudar sua posição alguns pixels para a esquerda dinamicamente.
Como fazer isso programaticamente?
EDIT: Uma maneira mais genérica de fazer isso que não depende do tipo de layout (exceto que é um tipo de layout que suporta margens):
public static void setMargins (View v, int l, int t, int r, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b);
v.requestLayout();
}
}
Você deve verificar os documentos para o TextView . Basicamente, você deseja obter o objeto LayoutParams do TextView e modificar as margens e depois defini-lo novamente para o TextView. Supondo que ele esteja em um LinearLayout, tente algo como isto:
TextView tv = (TextView)findViewById(R.id.my_text_view);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams();
params.setMargins(0, 0, 10, 0); //substitute parameters for left, top, right, bottom
tv.setLayoutParams(params);
Não posso testá-lo agora, então minha transmissão pode demorar um pouco, mas o LayoutParams é o que precisa ser modificado para alterar a margem.
Não se esqueça de que, se seu TextView estiver dentro, por exemplo, de um RelativeLayout , use RelativeLayout.LayoutParams em vez de LinearLayout.LayoutParams
Use LayoutParams (como já explicado). No entanto, tenha cuidado com o LayoutParams para escolher. De acordo com https://stackoverflow.com/a/11971553/3184778 "você precisa usar aquele que se relaciona com o PAI da visualização em que está trabalhando, não da visualização real"
Se, por exemplo, o TextView estiver dentro de um TableRow, você precisará usar TableRow.LayoutParams em vez de RelativeLayout ou LinearLayout
fonte
Use esta função para definir todos os tipos de margens
fonte
Atualização: Android KTX
O módulo Core KTX fornece extensões para bibliotecas comuns que fazem parte da estrutura do Android,
androidx.core.view
entre elas.As seguintes funções de extensão são úteis para lidar com margens:
setMargins()
função de extensão:Define as margens de todos os eixos nos
ViewGroup
'sMarginLayoutParams
. (A dimensão deve ser fornecida em pixels; consulte a última seção se você quiser trabalhar com o dp)updateMargins()
função de extensão:Atualizações as margens no
ViewGroup
'sViewGroup.MarginLayoutParams
.updateMarginsRelative()
função de extensão:Atualizações as margens relativas no
ViewGroup
'sMarginLayoutParams
(início / fim, em vez de esquerda / direita).As seguintes propriedades de extensão são úteis para obter as margens atuais:
dp
vez depx
:Se você deseja trabalhar com
dp
(pixels independentes da densidade) em vez depx
, precisará convertê-los primeiro. Você pode fazer isso facilmente com a seguinte propriedade de extensão:Em seguida, você pode chamar as funções de extensão anteriores, como:
Resposta antiga:
No Kotlin, você pode declarar uma função de extensão como:
Então você pode chamar assim:
Ou:
fonte