レイアウトxmlにlayout_weightをハードコーディングしましたが、Javaコードからlayout_weightとweightSumを指定したいと思います。
クラスからどのようにそれを行うのですか?
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:weightSum="25" >
<TextView
Android:id="@+id/textView1"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="5"
Android:background="#F51215"
Android:paddingLeft="5dip"
Android:text="5" />
<TextView
Android:id="@+id/textView2"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="20"
Android:background="#1AC92B"
Android:paddingLeft="5dip"
Android:text="20" />
</LinearLayout>
//set as like this below for different view set different float value.
myview.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,5f));
このようなもの:
......
LinearLayout layout = (LinearLayout)findViewById(YOUR_LAYOT_ID);
layout.setWeightSum(25f);
LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) layout.getLayoutParams(); //or create new LayoutParams...
lParams.weight = 0.5f;
.......
someView.setLayoutParams(lParams);
.......
たとえば、TextViewsを内部に持つTableRowでweightsumを使用する方法の例を追加したかっただけです。
TableRow row = new TableRow(this);
TableRow.LayoutParams params1 = new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 10f);
row.setLayoutParams(params1);
row.setPadding(10, 10, 10, 10);
row.setBackgroundColor(R.color.black);
TextView tv = new TextView(this);
TableRow.LayoutParams params2 = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 6f);
tv.setLayoutParams(params2);
tv.setTextSize(30);
tv.setBackgroundResource(R.color.white);
TextView tv2 = new TextView(this);
TableRow.LayoutParams params3 = new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 2f);
tv2.setLayoutParams(params3);
tv2.setBackgroundResource(R.color.green);
TextView tv3 = new TextView(this);
TableRow.LayoutParams params4 = new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 2f);
tv3.setLayoutParams(params4);
tv3.setBackgroundResource(R.color.blue);
下にTableRowを生成します。重みの合計が10で、子の幅が幅の60%、20%、および20%に等しい親。高さは、ここでは高さが30のTextView、tvによって決定されます。誰かに役立つことを願っています。 :-)
設定方法は次のとおりです。
LinearLayout yourLayout=(LinearLayout)findViewById(R.id.container);
yourLayout.setWeightSum(0.6f);
LinearLayoutを使用して重み付きのTextViewを動的に生成する
LinearLayout lin_hoizontal = new LinearLayout(context);
lin_hoizontal.setOrientation(LinearLayout.HORIZONTAL);
lin_hoizontal.setLayoutParams(new Android.widget.LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 10f));
lin_hoizontal.setPadding((int) context.getResources().getDimension(R.dimen.d_8), (int) context.getResources().getDimension(R.dimen.d_2), (int) context.getResources().getDimension(R.dimen.d_8), (int) context.getResources().getDimension(R.dimen.d_2));
Android.widget.LinearLayout.LayoutParams params_label = new Android.widget.LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 2.5f);
TextView txt_label = new TextView(context);
txt_label.setTextColor(context.getResources().getColor(R.color.listing_header_txt_color));//your text color
txt_label.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.d_13));
txt_label.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
txt_label.setLayoutParams(params_label);
txt_label.setPadding(0, 0, (int) context.getResources().getDimension(R.dimen.d_2), 0);
txt_label.setText("Label");
Android.widget.LinearLayout.LayoutParams params_value = new Android.widget.LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 7.5f);
TextView txt_value = new TextView(context);
txt_value.setTextColor(context.getResources().getColor(R.color.listing_header_txt_color));
txt_value.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.d_13));
txt_value.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));
txt_value.setLayoutParams(params_value);
txt_value.setPadding((int) context.getResources().getDimension(R.dimen.d_2), 0, 0, 0);
txt_value.setText("Value");
lin_hoizontal.addView(txt_label);
lin_hoizontal.addView(txt_value);
lin_hoizontal.addView(lin_main);
私はアジイの答えが好きですまたは:
_((LinearLayout)view).setWeightSum(n);
_
個々のビューの重みの場合:
_((LinearLayout.LayoutParams)view.getLayoutParams()).weight = n;
_
もちろんできます。LinearLayout view = findViewById(R.id.view_name);
(そして動的キャストを削除します(LinearLayout))
または、上記のビューの代わりに...……….. findViewById(R.id.view_name)
を使用します。
これらは両方とも私のために働いた。そして、dimensファイルに値が必要な場合:
_<item name="new_weight" format="float" type="dimen">(your number)</item>
_
および:float n = getResources().getFloat(R.dimen.new_weight);
あなたはすでにこれのほとんどを知っていると確信していますが...私はかつて初心者でした、そして私はいつも余分な説明に感謝しました。