1

複合ウィジェットを作成するために LinearLayout を拡張しています。ウィジェットは、layout_width="MATCH_PARENT" に設定されています。

mLabelTextView = new TextView(context);
mLabelTextView.setText("Testing");
LayoutParams labelParams = new
LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT, 0.0f);
labelParams.gravity = Gravity.CENTER_VERTICAL;
addView(mLabelTextView, labelParams);

mContentView = new Checkbox(content);
contentParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1.0f);
contentParams.gravity = Gravity.CENTER_VERTICAL | Gravity.Right;

addView(mContentView, contentParams);

私の問題は、Gravity.Right プロパティが mContentView で有効になっていることですが、Gravity.CENTER_VERTICAL は有効です。残りのスペースを埋めるために mContentView が引き伸ばされていることはわかっています。私はすでにgravity = rightを単独で取得しようとしましたが、うまくいきませんでした。

私は、XMLですでに正しい重力が設定されていて、それが機能しているビューを膨らませる同様のコードパスを持っています。だから私はどこかで何かが欠けているに違いない。

4

1 に答える 1

2

LinearLayoutが水平方向を持っている場合 (指定していませんが、私は推測しています)、すべての水平レイアウトのグラビティ ビットを無視します。同様に、垂直方向の場合、CENTER_VERTICAL設定は無視されます。

1 つのトリックはmContentView、垂直方向の でラップし、LinearLayoutそのラッパーに 1 のレイアウト ウェイトを指定して (残りのスペースを埋めるため)、ラッパーがRIGHT重力を尊重するようにすることです。

RelativeLayoutより良い代替手段は、の代わりに拡張することですLinearLayout。これにより、重力を 2 次元で制御できます ( とは異なりLinearLayoutます)。

于 2012-08-08T16:00:04.777 に答える