linearlayout - Método Java para Android: layout_gravity
relativelayout android (6)
Me gustaría saber si hay una forma de llamar a android:layout_gravity
propiedad de android:layout_gravity
desde un método Java. No encontré ningún método en la documentación de Android para hacerlo. Esta es la imagen del diseño que quiero implementar:
http://www.anddev.org/resources/image/2234
Sé hacerlo a través de XML, de la siguiente manera:
<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>
Pero en mi situación, tengo que hacerlo a través del código Java, porque implementaré otras vistas de diseño dinámicamente. Para evitar combinar el diseño XML con el código Java, preferiría hacer todo el diseño con Java.
¡Cuidado! Sin embargo, esto no funcionaría con LinearLayout. Porque el constructor LinearLayout.LayoutParams (...) es diferente del constructor FrameLayout.LayoutParams (...). El tercer parámetro no es la gravedad sino el peso.
LinearLayout.LayoutParams(int width, int height, float weight)
Opuesto a
FrameLayout.LayoutParams(int width, int height, int gravity)
y esta llamada, a pesar de no producir el error del compilador es realmente incorrecta:
lparams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.LEFT);
Bueno, por lo que entiendo que estés buscando this , es para FrameLayout para otro diseño ver las clases apropiadas de LayoutParams. Para configurar la gravedad como en su XML, use algo como:
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,Gravity.LEFT | Gravity.CENTER_VERTICAL)
seguido de addView
con addView
de nueva construcción
Para cambiar el atributo layout_gravity
para una vista 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);
El botón está contenido en un FrameLayout
que tiene un atributo de gravity
correspondiente al atributo XML de layout_gravity
. Enlace de documentación .
Quizás te malinterprete, pero aquí está:
http://developer.android.com/reference/android/widget/TextView.html#setGravity(int)
antes de agregar el botón, debe cambiar la orientación de su diseño
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);
button.setBackgroundResource(R.drawable.sound_on);
button.setText("On");
button.setGravity(Gravity.CENTER_VERTICAL| Gravity.RIGHT);
button.invalidate();