2017-10-14 73 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。