1

我延伸的LinearLayout做一個複合小部件。小部件設置爲layout_width =「MATCH_PARENT」。的LayoutParams重力權沒有強制

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正在拉伸以填充剩餘的空間。我已經嘗試過僅僅靠自己來獲得重力,並沒有成功。

我在我膨脹已經具有右重力在XML集和正在工作的視圖類似的代碼路徑。所以我必須在某處丟失某些東西。

回答

2

如果你的父母LinearLayout具有水平方向(你不指定,但我猜),那麼它會忽略所有的水平佈局重力位。同樣,如果它具有垂直方向,那麼它將忽略CENTER_VERTICAL設置。

一個竅門是包裝在一個垂直取向的LinearLayoutmContentView,給該包裝物1的佈局重量(,使其充滿剩餘的空間),然後包裝將履行RIGHT重力。

一個更好的選擇可能是延長RelativeLayout,而不是LinearLayout。這讓你在重力2-d控制(不像LinearLayout)。

+0

感謝泰德。這很有道理。我會和RelativeLayout一起去,因爲我寧願不在我的樹中引入另一個級別。是的,這是水平方向。 – 2012-08-08 16:06:52