Eu gostaria de saber se há uma maneira de ligar android:layout_gravity
propriedade de um método Java. Eu não encontrei nenhum método na documentação do Android para fazer isso. Esta é a imagem do layout que eu quero implementar:
http://www.anddev.org/resources/image/2234
Eu sei fazer isso através de XML, da seguinte forma:
<FrameLayout
xlmns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_gravity="left|center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="<" />
<Button
android:layout_gravity="right|center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=">" />
</FrameLayout>
Mas, na minha situação, preciso fazer isso por meio do código Java, porque implementarei outras visualizações de layout dinamicamente. Para evitar mesclar o layout XML com código Java, prefiro fazer todo o layout usando Java.
Respostas:
29 para resposta № 1Bem, tanto quanto eu entendo que você está procurando esta É para o FrameLayout para outro layout, ver as classes LayoutParams apropriadas. Para definir a gravidade como em seu XML, use algo como:
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,Gravity.LEFT | Gravity.CENTER_VERTICAL)
Seguido por addView
com recém construído LayoutParams
2 para resposta № 2
Talvez eu te entenda mal, mas aqui está:
http://developer.android.com/reference/android/widget/TextView.html#setGravity(int)
2 para resposta № 3
Cuidado! Isso não iria funcionar com LinearLayout embora. Porque o construtor LinearLayout.LayoutParams (...) é diferente do construtor FrameLayout.LayoutParams (...) O terceiro parâmetro não é gravidade, mas peso.
LinearLayout.LayoutParams(int width, int height, float weight)
ao contrário de
FrameLayout.LayoutParams(int width, int height, int gravity)
e esta chamada, apesar não produzindo erro do compilador está realmente errado:
lparams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.LEFT);
1 para resposta № 4
button.setBackgroundResource(R.drawable.sound_on);
button.setText("On");
button.setGravity(Gravity.CENTER_VERTICAL| Gravity.RIGHT);
button.invalidate();
1 para resposta № 5
Para mudar o layout_gravity
atributo para uma visualização existente:
Button button = (Button) findViewById(R.id.some_button);
FrameLayout.LayoutParams params;
params = (LayoutParams) button.getLayoutParams();
params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
button.setLayoutParams(params);
O botão está contido em um FrameLayout
que tem um gravity
atributo correspondente ao layout_gravity
Atributo XML. Link de documentação.
-1 para resposta № 6
antes de adicionar o botão, você deve alterar a orientação do seu layout
yourbutton.setGravity(Gravity.RIGHT);
LayoutParams layout = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT);
layout.gravity = Gravity.RIGHT;
yourbutton.setLayoutParams(layout);
yourlayout.setGravity(Gravity.RIGHT);
yourlayout.addView(yourbutton);