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.
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.
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
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);
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
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);
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);
Sie können das Gewicht auch separat wie folgt angeben,
LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
lp1.weight=1;
Dies sollte für Sie funktionieren
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParams.MATCH_PARENT);
param.weight=1.0f;
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);
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);
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));