Fragment防穿透
Fragment使用时,以碎片的形式存在于activity中,有时会出现这样的情况:明明点击的是fragment的空白处,却触发了Activity里面或其他Fragment的点击事件,再或者自己写的某个局部页面覆盖在其他元素之上,或者FrameLayout,也会出现类似的[穿透][6]现象,为避免这种情况,有以下方法可以尝试:
- 自定义Fragment基类,处理onTouch事件
- layout.xml中设置Fragment最外层布局背景非透明(且非默认)
- layout.xml中设置Fragment最外层布局clickable=true
方法一:自定义Fragment基类
public abstract class BaseAidlFragment extends Fragment implements OnTouchListener {
protected View mView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
mView = inflater.inflate(getLayoutId(), container, false);
mView.setOnTouchListener(this);
return mView;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// 防Fragment穿透现象
return true;
}
}
//据说此方法可能会跟自定义onTouch事件有冲突,不过我认为此处应该不影响,合理理由逻辑关系控制事件传递即可
方法二:设置布局背景
此方法应该设置的是最外层布局的背景或者防穿透部分的布局
android:background=”@color/xxxxx”
此方法未亲测,不清楚,据说有效~~
方法三:设置父布局clickable=true
此方法应该设置的是最外层布局的背景或者防穿透部分的布局
android:clickable=”true”
此方法经测有效。
最近遇到相关问题,综合网络各前辈知识,记述于此,以备温习。