当我将一个片段(全屏显示,背景#77000000)显示在另一个片段(我们称之为main)之上时,我的主片段仍然会对点击做出反应(即使我们看不到它,我们也可以单击按钮)。

问题:如何防止点击第一个(主)片段?

EDIT

不幸的是,我不能只是隐藏主片段,因为我在第二个片段上使用透明的背景(所以,用户可以看到后面的位置)。


当前回答

你需要添加android:focusable="true"与android:clickable="true"

可点击意味着它可以通过指针设备点击,也可以通过触摸设备点击。

可聚焦意味着它可以从键盘等输入设备获得焦点。键盘等输入设备不能根据输入本身决定将输入事件发送到哪个视图,所以它们将它们发送到有焦点的视图。

其他回答

你需要添加android:focusable="true"与android:clickable="true"

可点击意味着它可以通过指针设备点击,也可以通过触摸设备点击。

可聚焦意味着它可以从键盘等输入设备获得焦点。键盘等输入设备不能根据输入本身决定将输入事件发送到哪个视图,所以它们将它们发送到有焦点的视图。

这听起来像是DialogFragment的一个案例。否则,使用片段管理器提交一个隐藏,另一个显示。这对我来说很有效。

方法1:

你可以添加到所有的片段布局

android:clickable="true"
android:focusable="true"
android:background="@color/windowBackground"

方法2:(编程)

从FragmentBase等扩展所有片段。然后将此代码添加到FragmentBase

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getView().setBackgroundColor(getResources().getColor(R.color.windowBackground));
    getView().setClickable(true);
    getView().setFocusable(true);
}

如果两个片段放在同一个容器视图中,则在显示第二个片段时应该隐藏第一个片段。

如果你想了解更多关于如何解决Fragment问题的问题,你可以查看我的库:https://github.com/JustKiddingBaby/FragmentRigger

FirstFragment firstfragment;
SecondFragment secondFragment;
FragmentManager fm;
FragmentTransaction ft=fm.beginTransaction();
ft.hide(firstfragment);
ft.show(secondFragment);
ft.commit();

添加android:clickable="true"对我来说并不管用。当CoordinatorLayout是父布局时,此解决方案不适用于该布局。这就是为什么我把RelativeLayout作为父布局,添加android:clickable="true"到它,并将CoordinatorLayout放在这个RelativeLayout上。