Android帧布局点击监听无效。

8

我有一个包含两个嵌套的LinearLayoutFrameLayout。我想要为FrameLayout添加一个onClickListener()。经过搜索,我找到了一个解决方案,即在FrameLayout中设置clickable="false"

以下是我的布局文件:

<FrameLayout
    android:id="@+id/flOuter"
    android:paddingLeft="@dimen/half_margin"
    android:paddingRight="@dimen/half_margin"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:clickable="false"
        android:gravity="center"
        android:id="@+id/flAddIdProof"
        android:background="@drawable/add_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
            android:clickable="false"
            android:id="@+id/ivIcon"
            android:src="@drawable/ic_add_black_48dp"
            android:background="@drawable/add_button_border"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        </LinearLayout>

    <LinearLayout
        android:clickable="false"
        android:id="@+id/llLinear"
        android:alpha="0.5"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:enabled="false"
            android:clickable="false"
            android:drawablePadding="@dimen/half_margin"
            android:drawableLeft="@drawable/ic_devices_black_24dp"
            android:hint="Identity Proof"
            android:inputType="none"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <EditText
            android:enabled="false"
            android:clickable="false"
            android:drawableLeft="@drawable/ic_border_color_black_24dp"
            android:hint="Identity Number"
            android:drawablePadding="@dimen/half_margin"
            android:inputType="none"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</FrameLayout>

这是我的点击监听器:

flOuter.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(DeviceInMeeting.this, "detect", Toast.LENGTH_SHORT).show();
    }
});

我不知道如何为onClick监听器进行调试,clickable="false"在我的情况下无效。


请提供需要翻译的具体内容。 - user1531971
4个回答

8
尝试在以下代码片段中实现FrameLayoutandroid:clickable="true"属性。
<FrameLayout    
   android:id="@+id/flOuter"
   android:clickable="true"
   android:focusable="true"
   android:foreground="attr/selectableItemBackground"
   android:paddingLeft="@dimen/half_margin"
   android:paddingRight="@dimen/half_margin"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">

同时,在其他嵌套布局中添加android:clickable="false"

<LinearLayout    
   android:id="@+id/flOuter"
   android:clickable="false" />

3

你使用错误了。尝试使用以下内容:

<FrameLayout
    android:id="@+id/flOuter"
    android:paddingLeft="@dimen/half_margin"
    android:paddingRight="@dimen/half_margin"
    android:layout_width="match_parent"
    android:clickable="true"
    android:layout_height="wrap_content">

    // Other layouts there

</FrameLayout>

但我想要可点击的框架布局,而不是线性布局。 - Bipin Gawand
1
你在Inner LinearLayout的宽度和高度上都使用了match_parent。因此它覆盖了整个FrameLayout,所以点击无效。明白我的意思吗? - Akhilesh Awasthi
如果我使用 textView 而不是 edittext,那么它可以工作...但是没有得到确切的解决方案。 - Bipin Gawand

0
对于您不想被点击的字段,请在它们上面添加clickable=false。对于您希望有点击事件的字段,请在它们上面添加clickable=true
需要记住的一件事是,如果您的子元素包含一些可点击的元素,例如按钮和编辑文本框,然后您希望在父布局上获取单击事件,则应将子元素设置为不可点击,将父元素设置为可点击。

0
你需要设置 OnTouchListener 而不是 OnClickListener。在 onTouch 方法中,你可以决定是否将触摸事件传递给子元素(通过返回 false)或消耗事件。
在你的情况下,你应该执行你的逻辑并返回 true。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接