it-swarm.com.de

Legen Sie die Layout-Gewichtung einer TextView programmgesteuert fest

Ich versuche, TableRow Objekte dynamisch zu erstellen und sie einem TableLayout hinzuzufügen. Das TableRow -Objekt hat 2 Elemente, ein TextView und ein CheckBox. Für die TextView Elemente muss das Layoutgewicht auf 1 eingestellt sein, damit die CheckBox Elemente ganz nach rechts verschoben werden.

Ich kann keine Dokumentation zum programmgesteuerten Festlegen der Layoutgewichtung eines TextView Elements finden.

205
eugene

Sie müssen TableLayout.LayoutParams Mit so etwas verwenden:

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

Der letzte Parameter ist das Gewicht.

352
Macarse

Die Antwort ist, dass Sie TableRow.LayoutParams verwenden müssen, nicht LinearLayout.LayoutParams oder andere LayoutParams.

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

Die verschiedenen LayoutParams sind nicht austauschbar und wenn Sie das falsche verwenden, scheint nichts zu passieren. Das übergeordnete Element der Textansicht ist eine Tabellenzeile.

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

94
Dorje

In den früheren Antworten wird weight an den Konstruktor eines neuen SomeLayoutType.LayoutParams-Objekts übergeben. In vielen Fällen ist es jedoch bequemer, vorhandene Objekte zu verwenden. So vermeiden Sie den Umgang mit Parametern, an denen wir nicht interessiert sind.

Ein Beispiel:

// 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);
37
sberezin
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

1f bedeutet als Gewicht = 1; Sie können 2f oder 3f eingeben, die Ansichten bewegen sich entsprechend dem Raum

16
user5967758

setze einfach layoutparameter in diesem layout wie

erstelle eine Param-Variable

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

1f ist gewichtsvariabel

stellen Sie Ihr Widget oder Layout wie

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

(ODER)

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

1f wird als Gewicht = 1 bezeichnet; Je nach Bedarf können Sie 2f oder 3f eingeben, die Ansichten bewegen sich entsprechend dem Raum. Verwenden Sie weight für "LinearLayout", um den angegebenen Abstand zwischen den Ansichten im linearen Layout festzulegen.

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);
11
anand krish

Sie können das Gewicht auch separat wie folgt angeben,

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

 lp1.weight=1;
7
kiran boghra

Dies sollte für Sie funktionieren

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

param.weight=1.0f;
7
Ashok Reddy M

Diese Arbeit für mich, und ich hoffe, es wird auch für Sie arbeiten

Legen Sie zuerst die LayoutParams für die übergeordnete Ansicht fest:

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

dann setze für die TextView (child):

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

Es gibt einen anderen Weg, dies zu tun. Falls Sie nur einen Parameter einstellen müssen, zum Beispiel 'height':

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

Nach 4 Stunden kämpfen. Schließlich funktionierte dieser Code für mich.

3 Spalten befinden sich in einer Reihe.

  TextView serialno = new TextView(UsersActivity.this);
  TextView userId = new TextView(UsersActivity.this);
  TextView name = new TextView(UsersActivity.this);

  serialno.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  userId.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  name.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
0
Gulshan Yadav