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




set programmatically (10)

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); 

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


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.


En las respuestas anteriores, el peso se pasa al constructor de un nuevo objeto SomeLayoutType.LayoutParams. Aún así, en muchos casos es más conveniente usar objetos existentes: ayuda a evitar tratar con parámetros en los que no estamos interesados.

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 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);

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);

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


También puedes dar peso por separado así.

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

 lp1.weight=1;

Esto debería funcionar para usted

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParams.MATCH_PARENT);

param.weight=1.0f;

Creo que el OP se ha ido hace mucho, pero en caso de que esta respuesta sea capaz de ayudar a futuros buscadores, pensé que publicaría una solución que he encontrado. He añadido este código en mi método onCreate() :

EDITADO: 07/05/11 para incluir el código de los comentarios:

final TextView tv = (TextView)findViewById(R.id.image_test);
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        LayerDrawable ld = (LayerDrawable)tv.getBackground();
        ld.setLayerInset(1, 0, tv.getHeight() / 2, 0, 0);
        ViewTreeObserver obs = tv.getViewTreeObserver();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            obs.removeOnGlobalLayoutListener(this);
        } else {
            obs.removeGlobalOnLayoutListener(this);
        }
    }

});

Primero obtengo una referencia final a mi TextView (para acceder en el método onGlobalLayout() ). Luego, obtengo el ViewTreeObserver de mi TextView , y agrego un OnGlobalLayoutListener , anulando onGLobalLayout (no parece haber un método de superclase para invocar aquí ...) y agrego mi código que requiere conocer las medidas de la vista en este oyente. Todo funciona como se espera para mí, así que espero que esto pueda ayudar.





android layout textview android-layout-weight