1. 程式人生 > >自定義viewgroup裡面巢狀viewgroup佈局出問題,如fill_parent失效

自定義viewgroup裡面巢狀viewgroup佈局出問題,如fill_parent失效

我的一個新專案用到了一個自定義可以拖動的控制元件,我在網上找到了一個demo,是通過重寫viewgroup來實現的,但是當我真正投入

使用的時候,發現我在裡面自己寫的佈局fill_parent失效,找了一上午終於發現問題,沒有重寫viewgroup裡面的onMeasure方法,

重寫之後發現還是沒有用,原來在我的onlayout方法裡面呼叫了子view 的measure方法。下面直接上部分程式碼了。

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
	// TODO Auto-generated method stub
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);

		final int count = getChildCount();
		for (int i = 0; i < count; i++) { 
 			getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
		}

	}

	/**
	 * 滑動過後,只要手指離開螢幕,就會呼叫這個方法,這個其實是在調整子view
	 */
	@Override
	protected void onLayout(boolean changed, int left, int top, int right,int bottom) {
		 Log.i(TAG, ">>left: " + left + " top: " + top + " right: " + right  
	                + " bottom:" + bottom);  
		 for(int i=0;i<getChildCount();i++){
			 View child = getChildAt(i);
			 child.setVisibility(View.VISIBLE);
		//	 child.measure(right-left, bottom-top);	//可以看成是在設定view的大小  ,把這一行去掉就好了
			 child.layout(0 + i * getWidth(), 0, getWidth() + i * getWidth(),  
	                    getHeight());
			 
 		 }
		 
		 int delta = currentScreenIndex*getWidth()-getScrollX();
		 scroller.startScroll(getScrollX(),0,delta,0, 500);
		 invalidate();
		 
	}