在另一个片段问题的片段
当我在另一个片段(我们称之为main)上显示一个片段(全屏幕背景为#77000000
)时,我的主片段仍然对点击作出反应(即使我们没有看到它,也可以点击一个button)。
问 :如何防止点击第一(主)片段?
编辑
不幸的是,我不能隐藏主要的片段,因为我使用了第二个片段的透明背景(所以用户可以看到后面的内容)。
将第二个片段视图的clickable
属性设置为true。 该视图将捕获该事件,以便它不会被传递到主碎片。 所以如果第二个片段的视图是一个布局,这将是代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
解决scheme非常简单。 在我们的第二个片段(与我们的主要片段重叠)中,我们只需要捕获onTouch
事件:
@Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstance){ View root = somehowCreateView(); /*here is an implementation*/ root.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return true; } }); return root; }
这听起来像DialogFragment的情况。 否则用片段pipe理器提交一个隐藏和另一个显示。 这对我有效。
你可以做的是你可以通过使用onClick属性来对前一个片段的布局进行空白点击,并且在活动中你可以创build一个函数doNothing(View view)
并且不要写任何东西。 这将为你做。
最好的方法是使用FrameLayout我使用它的片段,所以不需要在其他Xml中声明片段
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="@color/colorPrimary" tools:context="com.example.sumedh.fragmentpractice1.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_gravity="center"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:id="@+id/BtnNext"/> </FrameLayout>