問題重現,如下圖:
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.LinearLayout;
/**
*
* @author 作者:易皇星
*
* @toTODO 類描述: 可直接控制所有子控件是否可點擊的LinearLayout
*/
public class ChildClickableLinearLayout extends LinearLayout {
// 子控件是否可以接受點擊事件
private boolean childClickable = true;
public ChildClickableLinearLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public ChildClickableLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public ChildClickableLinearLayout(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
/**
* 重寫onInterceptTouchEvent()
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// 返回true則攔截子控件所有點擊事件,如果childclickable爲true,則需返回false
return !childClickable;
}
/**
* 然後就像正常LinearLayout一樣使用這個控件就可以了。在需要的時候調用一下setChildClickable,
* 參數爲true則所有子控件可以點擊,false則不可點擊。
*
* @param clickable
*/
public void setChildClickable(boolean clickable) {
childClickable = clickable;
}
}
使用:
ll_home_navigation = (ChildClickableLinearLayout)getView(R.id.ll_home_navigation);
ll_home_navigation.setChildClickable(false);