android-layout-weight android:layout_weight set - Establecer el peso de diseño de un TextView programáticamente





5 Answers

La respuesta es que tiene que 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, entonces no parece que suceda nada. El padre de la vista de texto es una fila de tabla, por lo tanto:

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

programmatically linearlayout studio

Estoy tratando de crear dinámicamente objetos TableRow y agregarlos a un 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 al extremo derecho.

No puedo encontrar documentación sobre cómo establecer mediante programación el peso del diseño de un elemento de TextView .




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

1f es denota como peso = 1; puedes dar 2f o 3f, las vistas se moverán de acuerdo al espacio




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; De acuerdo con su necesidad, puede dar 2f o 3f, las vistas se moverán según el espacio. Para realizar la distancia especificada entre vistas en el diseño lineal, utilice weightum 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);



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

Establezca primero los LayoutParams para la vista principal:

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

a continuación, establezca para el 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); 



Hay otra manera 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);



Related