2016-09-27 60 views
0

我有這樣的片段佈局:線性佈局不處理點擊

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/addNewItem" 
    android:clickable="true"> 
    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/addCityCityNameEdit" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/cityNameEditHint" 
     android:gravity="center_vertical|center_horizontal" 
     android:layout_weight="4" 
     android:layout_margin="@dimen/defaultMargin" 
     android:clickable="false" /> 
    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/addCityButton" 
     android:id="@+id/addCityButton" 
     android:layout_weight="1" 
     android:src="@android:drawable/ic_menu_add" 
     android:background="@null" 
     android:layout_margin="@dimen/defaultMargin" /> 
</LinearLayout> 
<android.support.v7.widget.RecyclerView 
    android:id="@+id/cityListRecycleView" 
    android:scrollbars="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</android.support.v7.widget.RecyclerView> 

和問題,我的佈局 「addNewItem」。我需要響應點擊佈局空間,但是當我點擊時沒有任何事情發生。代碼片段:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.city_list_fragment, container, false); 
    addNewView = (LinearLayout) view.findViewById(R.id.addNewItem); 
    addNewView.setAlpha(0.6f); 
    addNewView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d(TAG, "clicked"); 
     } 
    }); 
    ......... 

怎麼了?我的佈局有cliclable = true,但它沒有響應我的點擊。 我想以這樣的方式實現這個視圖,首先它的子項被禁用(setEnabled(false))。當用戶長時間點擊LinearLayout時,它會「解鎖」它的孩子,然後用戶可以通過這個解鎖的editText和添加按鈕在回收站視圖中添加項目。

+0

嘗試設置android:focusable =「true」'。或者使用'android:onclick'事件 – Doomsknight

+0

或給第一個LinearLayout上的id – CDrosos

+0

我試過這種方法(id爲根佈局,可聚焦和onclick),但問題仍然存在 – Vitali

回答

2

你怎麼樣嘗試這樣的事:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/addNewItem" 
       android:clickable="true"> 
    <View 
     android:id="@+id/dummyView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="invisible"/> 
    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/addCityCityNameEdit" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/cityNameEditHint" 
     android:gravity="center_vertical|center_horizontal" 
     android:layout_weight="4" 
     android:layout_margin="@dimen/defaultMargin" 
     android:clickable="false" /> 
    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/addCityButton" 
     android:id="@+id/addCityButton" 
     android:layout_weight="1" 
     android:src="@android:drawable/ic_menu_add" 
     android:background="@null" 
     android:layout_margin="@dimen/defaultMargin" /> 
</RelativeLayout> 
<android.support.v7.widget.RecyclerView 
    android:id="@+id/cityListRecycleView" 
    android:scrollbars="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</android.support.v7.widget.RecyclerView> 

然後在您的活動:

findViewById(R.id.dummyView).setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      v.setVisibility(View.GONE); 
      return false; 
     } 
    }); 

既然你現在會在一個相對佈局,第一個孩子都高於其他人將捕獲點擊事件,直到其可見性被設置爲消失(在onlongclicklistener中完成)。您仍然需要改變視圖在相對佈局中的設置方式,但現在應該很容易(您也可以在其中嵌套另一個線性佈局以避免這種情況,但不確定這是否是一種非常好的做法)。

原來的答覆: 高度由ImageButton的和完全的EditText拍攝,是click事件甚至當你點擊了這兩種觀點「邊」捕捉?

您可以將onClickListener設置爲這兩個視圖並從那裏處理。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.city_list_fragment, container, false); 
addNewView = (LinearLayout) view.findViewById(R.id.addNewItem); 
view.findViewById(R.id.addCityCityNameEdit).setOnClickListener(this); 
view.findViewById(R.id.addCityButton).setOnClickListener(this); 
addNewView.setAlpha(0.6f); 
addNewView.setOnClickListener(this); 

@Override 
public void onClick(View v){ 
    Log.d(TAG, "clicked"); 
} 
......... 
+0

有沒有一種容器可以處理點擊對其子女(空間)。 我想以這樣的方式實現這個視圖,首先它禁用了孩子(setEnabled(false)。當用戶長按LinearLayout時,它會「解鎖」它的孩子,然後用戶可以通過此解鎖的editText和添加按鈕在回收站視圖中添加項目 – Vitali

+0

哪一個?我收到關於評論的通知,以「基本上你可以做什麼......」開始,但在這裏不可見。我第一次問這個問題,可能是丟失了一些東西 – Vitali

+0

我的第一個新東西回答:) –