プログラムでTextViewのレイアウトの重みを設定する


214

TableRowオブジェクトを動的に作成してに追加しようとしていますTableLayoutTableRowオブジェクトは2つの項目、ありTextViewCheckBoxTextViewアイテムは、プッシュする1にそのレイアウトの重みを設定する必要はありCheckBox右端にアイテムを。

プログラムでTextViewアイテムのレイアウトの重みを設定する方法に関するドキュメントが見つかりません。

回答:


355

あなたはTableLayout.LayoutParamsこのようなもので使用する必要があります:

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

最後のパラメーターは重量です。


15
これまでは触れなかったのでごめんなさい。しかし、私は私の質問をする前にこれを試しました。TextViewをレイアウトから非表示にします。しかし、肯定的な注意として、TableLayoutのstretch_columnsプロパティを0に設定すると、私が探している効果(左側はTextView、右側はCheckBox)が発生することがわかりました。助けてくれてありがとう。
ユージーン

8
:あなたはXMLレイアウトをインポートしていて、動的にレイアウトを作成していない場合、あなたはこのようにそれをつかむことができますTextView tv = (TextView) findViewById(R.id.your_textview_inside_the_linearlayout); tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.1f));
エリックLeschinski

5
プログラムでレイアウトの重みを設定するには、のTableRow.LayoutParams代わりにを使用する必要がありTableLayout.LayoutParamsます。@Dorjeの回答を参照してください。
ハリル2014

import android.widget.LinearLayout; import android.widget.TableLayout;
Prakash

1
彼らが探しているのは重みを設定することなので、ほとんどの人はWRAP_CONTENTではなく、最初のパラメーターまたは2番目のパラメーターとして0(水平または垂直に依存)を使用することに注意してください。
FlorianB 2016年

97

その答えは、LinearLayout.LayoutParamsやその他のLayoutParamsではなく、TableRow.LayoutParamsを使用する必要があるということです。

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

異なるLayoutParamは交換できません。間違ったものを使用すると、何も起こらないようです。テキストビューの親はテーブル行なので、次のようになります。

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


この答えは私を大いに助けてくれました... TableLayoutは私にとってはうまくいきませんでした
sham.y

おやおや、あなたは私をそんなに時間を節約しました。それはどこに指定されていますか?私はあなたが交換できないことについてのドキュメントで何も見つかりませんでしたLayoutParams
Adrien Cadet

TableRow.LayoutParams私もその仕事をしました
Menelaos Kotsollaris

6
この回答の重要な部分は0です
レオン

私の作業時間を短縮します。これを長い間探しています。非常に優れたソリューション
SIVAKUMAR.J

38

以前の回答では、重みは新しいSomeLayoutType.LayoutParamsオブジェクトのコンストラクターに渡されます。それでも多くの場合、既存のオブジェクトを使用する方が便利です。これは、対象外のパラメータを処理しないようにするのに役立ちます。

例:

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

loparamsはNULLになる可能性があるため、setLayoutParams()を呼び出す前に必ず確認してください
AAgg

@AAgg、実際の状況ではありません。幅と高さが設定されていなければ、ビューは膨張しませんでした。しかし、私は同意します。nullについて疑いがある場合は確認することをお勧めします。
sberezin 2015

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

1fは、重み= 1として示されます。あなたは2fまたは3fを与えることができ、ビューは空間に応じて移動します


12

次のようにそのレイアウトにレイアウトパラメータを設定するだけです

パラメータ変数を作成する

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

1fは重み変数です

ウィジェットやレイアウトを次のように設定します

 TextView text = (TextView) findViewById(R.id.text);
 text.setLayoutParams(params);

1fが重み変数を意味するというこの情報はどこで入手できますか?リンクを提供していただけますか?
hayonj 2013

@hayonjはLinearLayout.LayoutParamsコンストラクタのソースをチェックするだけです。3番目のパラメーターは重量です。またはドキュメンテーション
メンテ

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

(または)

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

1fはweight = 1と呼ばれます。必要に応じて、2fまたは3fを指定できます。ビューは、コーディングに従ってスペースに移動します。線形レイアウトでビュー間の距離を指定するには、「LinearLayout」にweightsumを使用します。

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

8

これはうまくいくはずです

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

param.weight=1.0f;

7

このように別々に重量を与えることもできます、

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

 lp1.weight=1;

6

この仕事は私にとっても、あなたにとってもうまくいくことを願っています

最初に親ビューのLayoutParamsを設定します。

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

次に、TextView(子)に設定します。

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

1

これを行う別の方法があります。たとえば 'height'のように、パラメータを1つだけ設定する必要がある場合:

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

1

4時間しがみついた後。最後に、このコードは私のために働いた。

3列が並んでいます。

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

-1

私はこれと非常によく似た解決策でかなりの困難を抱えていました:TableRowに2つのボタンを置き、それぞれが画面幅の半分になるようにしました。何らかの理由で、左側のボタンは常に幅の約70%、右側のボタンは30%になります。table_layout.setStretchAllColumns(true)を呼び出しても効果はなく、ボタンの幅を画面の半分に設定したり、レイアウトの太さを設定したりしませんでした。

私はTableRows、中のLinearLayoutを入れ子にされたになってしまったソリューションでした口座にボタンの幅の値をとります。

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

1
あなたが将来のために知っているだけで、解決策はTableRow、Button1、およびButton2をすべてhave layout_width=fill_parentに設定し、それを行った後layout_weight=1、button1とbutton2の両方にを設定することです。fill_parentおよびlayout_weight = 1のすべての要素は、膨張時に同じサイズになります。
edthethird
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.