如何防止CoordinatorLayout内部的自定义View拦截其他View的行为

时间:2019-04-23 11:01:08

标签: android android-layout android-custom-view android-coordinatorlayout androidx

这是一个简单的布局:

<CoordinatorLayout>

    <View android:id="+id/view1" />

    <View 
        android:id="+id/view2"
        app:layout_behavior="@string/bottom_sheet_behavior" />

    <CustomView 
        android:id="+id/custom_view" />

</CoordinatorLayout>

现在让我们假设CustomView是最大的,就像它的大小与设备的屏幕一样,而它可以是透明的并且不应处理任何触摸输入事件。在这种情况下,我发现layout_behavior中定义的view2将不再起作用。那么为什么会发生这种情况以及如何解决呢?

预先感谢您的任何想法或答案。

2 个答案:

答案 0 :(得分:0)

如果我正确理解,您想使用

的行为
app: layout_behavior = "@ string / bottom_sheet_behavior"

对吗?作为CoordinatorLayout is a super-powered FrameLayout,则应输入

<View
    android: id = "+ id / view2"
    app: layout_behavior = "@ string / bottom_sheet_behavior" />

CustomView 下方,该行为才能生效。

答案 1 :(得分:0)

也许我没有正确理解您的问题,但是您不能将 clickable 设置为 false 吗?

export const renderTextField = ({input, label, meta: {touched, error}, ...other}) =>
    <TextField
        label={label}
        error={!!(touched && error)}
        helperText={!!(touched && error) && error}
        {...input}
        {...other}
    />

您可以通过编程方式进行切换;

android:clickable="false"