自定义 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 上放置一些填充或边距(底部)来尝试一次。
代替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)
}
我没有改变我的 onResume
和 onStop
方法。所以问题只是使用 View
标志来获得全屏模式。
我正在尝试构建单个 Activity 应用程序并在我的 Activity
中使用自定义 SupportActionBar
。其他View都是Fragments。
我的习惯 SupportActionBar
看起来像这样:
现在我必须在 Fragment
中以全屏模式显示视频。因此我只是调用 SupportActionBar
:
override fun onResume() {
super.onResume()
(activity as MainActivity).supportActionBar!!.hide()}
效果很好,但是当我想在视频结束后再次显示该栏时,该栏看起来不一样了。
在我的 Fragment
中,我从 SupportActionBar
调用 show 函数和 MainActivity
:
override fun onStop() {
super.onStop()
(activity as MainActivity).supportActionBar!!.show()
(activity as MainActivity).initToolbar()
}
这是我的 Activity
:
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 上放置一些填充或边距(底部)来尝试一次。
代替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)
}
我没有改变我的 onResume
和 onStop
方法。所以问题只是使用 View
标志来获得全屏模式。