2016-09-27 58 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

我的第一个新东西回答:) –