Android 之控制所有子控件是否可點擊的LinearLayout

問題重現,如下圖:

這裏寫圖片描述

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章