2017-10-14 70 views
0

我有FrameLayout与两个嵌套LinearLayout s。我想onClickListener()FrameLayout。搜索后,我得到了一个解决方案clickable="false"Android的框架布局单击收听者不工作

这是我的布局文件:

<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"是不是在我的情况下工作。

+0

重复:https://stackoverflow.com/q/37698640/1531971 – jdv

回答

1

您错误地使用了它。尝试使用:

<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> 
+0

但我想可点击的框架布局,而不是线性布局 –

+0

是的。我编辑了答案。检查它 –

+0

不知道为什么,但你的解决方案不适合我... –

0

对于不希望被点击的字段,请向他们添加clickable=false。 对于你想要点击事件的字段,请为它们添加clickable=true

这里要记住的一件事是,如果您的子元素包含一些可点击的元素(如按钮和edittexts),然后您想要在父布局上获得点击事件,则将可点击的false添加到子元素,并向父元素添加true。

0

尝试下面的代码片段实现android:clickable="true"FrameLayout

<FrameLayout  
    android:id="@+id/flOuter" 
    android:clickable="true" 
    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" /> 
0

您需要设置OnTouchListener而不是onClickListener。在onTouch方法中,您可以决定是否将触摸事件传递给儿童(通过返回false)或使用事件。

在你的情况下,你应该做你的逻辑,并返回true。