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

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

EDIT

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


当前回答

我们中的一些人在这个帖子中提供了不止一个解决方案,但我也想提到另一个解决方案。如果你不喜欢把可点击和可聚焦等同于每个布局的根视图组在XML中。你也可以把它放在你的底座上,如果你有一个像下面这样的;

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) : View? {
        super.onCreateView(inflater, container, savedInstanceState)

        val rootView = inflater.inflate(layout, container, false).apply {
            isClickable = true
            isFocusable = true
        }

        return rootView
    }

你也可以使用内联变量,但我不喜欢它的个人原因。

我希望它能帮助那些讨厌布局xml的人。

其他回答

将第二个片段视图上的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" />

可接受的答案将“工作”,但也会导致性能成本(透支,重新测量方向变化),因为底部的片段仍在绘制中。也许你应该简单地通过标签或ID找到片段,并将可见性设置为GONE或当你需要再次显示时可见。

在芬兰湾的科特林:

fragmentManager.findFragmentByTag(BottomFragment.TAG).view.visibility = GONE

当你使用动画时,这个解决方案比FragmentTransaction的hide()和show()方法更可取。你只需从Transition.TransitionListener的onTransitionStart()和onTransitionEnd()调用它。

你能做的是你可以给一个空白点击到以前的片段的布局使用onClick属性父布局的主片段和在活动中,你可以创建一个函数doNothing(视图视图),不写任何东西。这个可以帮你。

只需添加clickable="true"和focusable="true"到父布局

 <android.support.constraint.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:clickable="true"
      android:focusable="true">

      <!--Your views-->

 </android.support.constraint.ConstraintLayout>

如果你正在使用AndroidX,试试这个

 <androidx.constraintlayout.widget.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:clickable="true"
      android:focusable="true">

          <!--Your views-->

 </androidx.constraintlayout.widget.ConstraintLayout>

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