在 Fragments Kotlin 中隐藏或显示操作栏

问题描述

我必须知道在 Fragments 中隐藏或显示 Action Bar 的最佳方法。我发现它与我可以在 Manifest 中应用样式的 Activity 不同。 我曾尝试在 Fragment XML 文件中应用该样式,但没有任何效果

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".PreviewFragment"
    **style="@style/MyStyleHereNoActionBar"**>
</FrameLayout>

一个有效但可能不稳定的选项是:

class PreviewFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {

        }
    }

    override fun onCreateView(
        inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

// hide action bar         (requireActivity() as AppCompatActivity).supportActionBar?.hide()
// show action bar         (requireActivity() as AppCompatActivity).supportActionBar?.show()

        return inflater.inflate(R.layout.fragment_preview,container,false)
    }

最后一个添加一种或两种方法

override fun onResume() {
        super.onResume()
        (activity as AppCompatActivity?)!!.supportActionBar!!.hide()
    }

    override fun onStop() {
        super.onStop()
        (activity as AppCompatActivity?)!!.supportActionBar!!.show()
    }

所以我很想知道我可以做得更好或其他方式。或者更确切地说是正确的方法

其次是如何以正确的方式将自定义样式应用于 Fragments。

谢谢。

解决方法

您正在活动中添加片段,并且活动具有操作栏。因此,在您想要显示操作栏的特定片段中获取活动并显示活动,并将其隐藏在您不想显示的地方。

或者,如果您想在片段内使用操作栏,那么只需在高度为 "?android:attr/actionBarSize" 的片段顶部添加线性布局。我认为这应该可以完成工作。