Establecer el peso de diseño de un TextView programáticamente

TableRow crear dinámicamente objetos TableRow y agregarlos a TableLayout . Los objetos TableRow tienen 2 elementos, un TextView y un CheckBox . Los elementos de TextView deben tener su peso de diseño establecido en 1 para empujar los elementos de CheckBox a la extrema derecha.

No puedo encontrar documentación sobre cómo establecer programáticamente el peso de diseño de un elemento TextView .

Tienes que usar TableLayout.LayoutParams con algo como esto:

 TextView tv = new TextView(v.getContext()); tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 

El último parámetro es el peso.

La respuesta es que debe usar TableRow.LayoutParams, no LinearLayout.LayoutParams o cualquier otro LayoutParams.

 TextView tv = new TextView(v.getContext()); LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f); tv.setLayoutParams(params); 

Los diferentes LayoutParams no son intercambiables y si utiliza el incorrecto, parece que no ocurre nada. El padre de la vista de texto es una fila de la tabla, por lo tanto:

http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html

En las respuestas anteriores, el peso se pasa al constructor de un nuevo objeto SomeLayoutType.LayoutParams. Todavía en muchos casos es más conveniente usar objetos existentes, ayuda a evitar el manejo de parámetros que no nos interesan.

Un ejemplo:

 // Get our View (TextView or anything) object: View v = findViewById(R.id.our_view); // Get params: LinearLayout.LayoutParams loparams = (LinearLayout.LayoutParams) v.getLayoutParams(); // Set only target params: loparams.height = 0; loparams.weight = 1; v.setLayoutParams(loparams); 
 TextView txtview = new TextView(v.getContext()); LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f); txtview.setLayoutParams(params); 

1f se denota como peso = 1; puedes dar 2f o 3f, las vistas se moverán según el espacio

simplemente establece parámetros de diseño en ese diseño como

crear la variable param

  android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f); 

1f es variable de peso

establece tu widget o diseño como

  TextView text = (TextView) findViewById(R.id.text); text.setLayoutParams(params); 
 TextView text = new TextView(v.getContext()); text.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 

(O)

 TextView tv = new TextView(v.getContext()); LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f); tv.setLayoutParams(params); 

1f se refiere como peso = 1; según su necesidad puede dar 2f o 3f, las vistas se moverán según el espacio. Para establecer la distancia especificada entre las vistas en el diseño lineal, use el peso para “LinearLayout”.

 LinearLayout ll_Outer= (LinearLayout ) view.findViewById(R.id.linearview); LinearLayout llInner = new LinearLayout(this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent); llInner.Orientation = Orientation.Horizontal; llInner.WeightSum = 2; ll_Outer.AddView(llInner); 

También puedes dar peso por separado de esta manera,

 LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); lp1.weight=1; 

Este trabajo para mí, y espero que funcione para usted también

Primero configure los LayoutParams para la vista principal:

 myTableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.FILL_PARENT)); 

luego configurado para TextView (hijo):

  TableLayout.LayoutParams textViewParam = new TableLayout.LayoutParams (TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT,1f); //-- set components margins textViewParam.setMargins(5, 0, 5,0); myTextView.setLayoutParams(textViewParam); 

Esto debería funcionar para ti

 LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParamsMATCH_PARENT); param.weight=1.0f; 

Hay otra forma de hacer esto. En caso de que necesite establecer solo un parámetro, por ejemplo ‘altura’:

 TextView textView = (TextView)findViewById(R.id.text_view); ViewGroup.LayoutParams params = textView.getLayoutParams(); params.height = ViewGroup.LayoutParams.WRAP_CONTENT; textView.setLayoutParams(params); 

Tuve una gran cantidad de dificultad con una solución algo muy similar a esto: tratar de tener dos botones en un TableRow, con cada uno de ellos la mitad del ancho de la pantalla. Por alguna razón, el botón izquierdo siempre será alrededor del 70% del ancho, y el botón derecho 30%. Llamar a table_layout.setStretchAllColumns (true) no tuvo ningún efecto, ni establecer el ancho del botón a la mitad de la pantalla, ni establecer su peso de diseño.

La solución con la que terminé fue anidar un LinearLayout en TableRows, que tuvo en cuenta el valor del ancho de los botones.

  TableLayout layout = new TableLayout(this); TableRow top_row = new TableRow(this); left_button = styleButton(); right_button = styleButton(); LinearLayout toprow_layout = new LinearLayout (this); toprow_layout.setOrientation(LinearLayout.HORIZONTAL); toprow_layout.addView (left_button); toprow_layout.addView(right_button); toprow.addView(top_layout); layout.addView(top_row) private Button styleButton() { Button btn = new Button (this); android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); btn.setWidth((int)(display.getWidth()/2)); // set width to half btn.setHeight(((int)display.getHeight()/6)); // set height to whatevs btn.setText("foo"); return btn; }