自定义 SupportActionBar 在重新显示后看起来不同

Custom SupportActionBar looks different after redisplayed

我正在尝试构建单个 Activity 应用程序并在我的 Activity 中使用自定义 SupportActionBar。其他View都是Fragments。

我的习惯 SupportActionBar 看起来像这样:

现在我必须在 Fragment 中以全屏模式显示视频。因此我只是调用 SupportActionBar:

的隐藏函数
override fun onResume() {
super.onResume()
(activity as  MainActivity).supportActionBar!!.hide()}

效果很好,但是当我想在视频结束后再次显示该栏时,该栏看起来不一样了。

在我的 Fragment 中,我从 SupportActionBar 调用 show 函数和 MainActivity:

的 initToolbar 函数
override fun onStop() {
    super.onStop()
    (activity as MainActivity).supportActionBar!!.show()
    (activity as MainActivity).initToolbar()
}

这是我的 Activity:

中的 initToolbar 方法
fun initToolbar() {
    setSupportActionBar(toolbar_all_custombar)
    supportActionBar!!.setDisplayShowTitleEnabled(false)
    supportActionBar!!.setIcon(R.drawable.ic_launcher)
}

工具栏布局:

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar_all_custombar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:titleTextAppearance="@style/AppTheme.TitleTextStyle"
app:titleTextColor="@color/textColorPrimary">

<TextView
    android:id="@+id/toolbar_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/all_toolbar_title"
    android:textColor="@android:color/white"
    android:textStyle="bold|italic"/>

</android.support.v7.widget.Toolbar>

我不明白为什么我的栏再次显示后看起来不一样。 这种行为的原因是什么?

通过在 TextView 上放置一些填充或边距(底部)来尝试一次。

使用 setSystemUiVisibility

代替supportActionBar!!.hide()

隐藏():如果托管 ActionBar 的 window 没有 FEATURE_ACTION_BAR_OVERLAY 功能,它将调整应用程序内容的大小以适应新的 space可用。

setSystemUiVisibility():通过此系统隐藏 ActionBar UI 标志允许您更无缝地与其他屏幕装饰一起隐藏它。

使 SupportActionBar 再次可见后,您可以尝试调用 (activity as MainActivity).supportActionBar.invalidate(); 重绘其中的所有视图。这应该会导致您的 supportActionBar 被正确重绘。

可以在隐藏时设置supportToolBar为null,显示时恢复原值。

这已经过测试并且适用于我的情况。

感谢您的帮助! 我终于解决了。问题是我使用了一些 View 标志来在各自的 Fragment 中实现全屏模式。因此,我在 Fragment:

中删除了以下函数
private fun hideSystemUiFullScreen() {
    exoplayer_videoview_container!!.systemUiVisibility = (View.SYSTEM_UI_FLAG_LOW_PROFILE
            or View.SYSTEM_UI_FLAG_FULLSCREEN
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
}

我没有改变我的 onResumeonStop 方法。所以问题只是使用 View 标志来获得全屏模式。