layout_weight - table layout android
¿Cómo establecer layout_gravity mediante programación? (16)
Cambié de LinearLayout.LayoutParams a RelativeLayout.LayoutParams para obtener finalmente el resultado que deseaba en una vista de circuito personalizada que creé.
Pero en lugar de la gravedad usas addRule
RelativeLayout.LayoutParams mCircleParams = nuevo RelativeLayout.LayoutParams (circleheight, circleheight);
mCircleParams.addRule(RelativeLayout.CENTER_IN_PARENT);
Mi pregunta es simple,
¿Cómo configurar mis botones layout_gravity mediante programación?
Encontré esto en internet, pero simplemente me lanza una excepción de Nullpointer:
Button MyButton = new Button(this);
LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
lllp.gravity=Gravity.RIGHT;
MyButton.setLayoutParams(lllp);
MyLinearLayout.addView(MyButton);
¿Alguna solución?
El resto de las respuestas son correctas, quiero agregar más explicaciones. La layout_gravity trata sobre cómo colocar la vista en la vista principal.
Debe establecer la gravedad ** después de que se haya llamado al método parentView.addView () **. Podemos ver el código:
public void setLayoutParams(ViewGroup.LayoutParams params) {
if (params == null) {
throw new NullPointerException("Layout parameters cannot be null");
}
mLayoutParams = params;
resolveLayoutParams();
if (mParent instanceof ViewGroup) {
((ViewGroup) mParent).onSetLayoutParams(this, params);
}
requestLayout();
}
Y el problema del puntero nulo es porque no está llamando a addView antes de getLayoutParams ().
La anotación ya se dijo "Este método puede devolver nulo si esta vista no está asociada a un grupo de vista principal o {@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)} no se invocó con éxito. Cuando se adjunta una vista a un padre ViewGroup, este método no debe devolver nulo ".
En caso de que necesite establecer Gravity for a View, use lo siguiente
Button b=new Button(Context);
b.setGravity(Gravity.CENTER);
Para configurar layout_gravity para el botón, utilice el campo de gravedad para los layoutparams como
LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER;
prueba esta esperanza esto se aclara gracias
Esta pregunta es antigua pero acabo de tener el mismo problema y lo resolví así.
LayoutParams lay = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)
lay.gravity = Gravity.CENTER;
Odiaría resucitar hilos viejos, pero este es un problema que no se responde correctamente y, además, me he encontrado con este problema.
Aquí está el bit largo, si solo está interesado en la respuesta, desplácese hasta el código:
android: gravedad y android: layout_gravity funciona de manera diferente. Here un artículo que he leído que me ayudó.
GIST del artículo: la gravedad afecta la vista después de que se asigna la altura / anchura. Por lo tanto, el centro de gravedad no afectará una vista que se realiza FILL_PARENT (piense en ello como un margen automático). layout_gravity center afectará a la vista que es FILL_PARENT (considérala como un pad automático).
Básicamente, android: layout_gravity NO SE PUEDE acceder mediante programación, solo android: gravity. En el caso del OP y mi caso, la respuesta aceptada no coloca el botón verticalmente en el centro.
Para mejorar la respuesta de Karthi:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
button.setLayoutParams(params);
Link a LinearLayout.LayoutParams
.
android: layout_gravity muestra el significado de "No hay métodos relacionados" no se puede acceder mediante programación. Mientras que la gravedad es un campo en la clase.
Prueba este codigo
Button btn = new Button(YourActivity.this);
btn.setGravity(Gravity.CENTER | Gravity.TOP);
btn.setText("some text");
o
btn.setGravity(Gravity.TOP);
Si desea cambiar la layou_gravity
de una vista existente, haga esto:
((FrameLayout.LayoutParams) view.getLayoutParams()).gravity = Gravity.BOTTOM;
Recuerde usar los LayoutParams
correctos según el tipo de diseño en el que se encuentre su vista. Ej:
LinearLayout.LayoutParams
Si desea colocar una vista en el centro del padre, puede hacerlo con el siguiente código ...
public class myLayout extends LinearLayout {
public myLayout(Context context) {
super(context);
RelativeLayout vi = (RelativeLayout) ((LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.activity_main, null);
LinearLayout.LayoutParams cc = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
cc.gravity = Gravity.CENTER;
this.setGravity(Gravity.CENTER);
this.addView(vi);
}
}
esta sección de código hace que LinearLayout ponga los primeros elementos de vista en el centro del padre. Por lo tanto, el sistema no considera el ancho inicial y el alto para organizar la vista en el centro. Hago bien la sección de código.
Tuve un problema similar con la configuración mediante programación de layout_gravity en los botones de un GridLayout.
El truco consistió en establecer la gravedad en el diseño del botón. Parámetros DESPUÉS de agregar el botón a un elemento principal (GridLayout), de lo contrario se ignoraría la gravedad .
grid.addView(button)
((GridLayout.LayoutParams)button.getLayoutParams()).setGravity(int)
Yo uso algo así: (código Xamarin y C #)
LinearLayout linLayout= new LinearLayout(this);
linLayout.SetGravity(GravityFlags.Center);
TextView txtView= new TextView(this);
linLayout.AddView(txtView);
SetGravity pone mi textView en el centro del diseño. Así que la propiedad de diseño SetGravity se refiere al contenido del diseño
a RelativeLayout, prueba este código, funciona para mí: yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
Perfectamente trabajando !!! Ninguna de las respuestas anteriores funciona para mí. En la configuración del archivo Xml, la gravedad y la configuración layout_gravity son diferentes. Echa un vistazo al siguiente código
// here messageLL is the linear layout in the xml file
// Before adding any view just remove all views
messageLL.removeAllViews();
// FrameLayout is the parent for LinearLayout
FrameLayout.LayoutParams params = new
FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params.gravity = Gravity.CENTER|Gravity.CENTER_VERTICAL;
messageLL.setLayoutParams(params);
messageText.setVisibility(View.GONE);
messageNoText.setVisibility(View.VISIBLE);
messageLL.addView(messageNoText);
También marque Esto, donde puede encontrar una explicación clara sobre la gravedad y la gravedad del diseño.
int width=getResources().getDisplayMetrics().widthPixels;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
(width, width);
params.gravity = Gravity.CENTER;
iv_main_text = new HTextView(getContext());
iv_main_text.setLayoutParams(params);
iv_main_text.setBackgroundColor(Color.BLUE);
iv_main_text.setTextSize(60);
iv_main_text.setGravity(Gravity.CENTER);
iv_main_text.setTextColor(Color.BLACK);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);
params.weight = 1.0f;
params.gravity = Gravity.TOP;
button.setLayoutParams(params);
Para los valores de gravedad y cómo configurar la gravedad, compruebe la Gravity .
Y, básicamente, deberías elegir los LayoutParams dependiendo del padre. Puede ser RelativeLayout, LinearLayout, etc ...
MyButton.setGravity(Gravity.RIGHT);
Para layout_gravity usa la respuesta indicada por "karthi". Este método establece la gravedad para colocar a los niños dentro de la vista.
layoutParams2.gravity = Gravity.RIGHT|Gravity.BOTTOM;
Usa esto para agregar más de una gravedad.