在 android 中仅显示状态栏?
Display only status bar in android?
我希望应用程序仅显示状态栏并使导航栏处于 IMMERSIVE_STICKY
模式。尝试了很多东西,但导航栏以某种方式保留并且状态栏被隐藏。 material 主题是否会影响全屏功能?
针对同一问题尝试了其他相关问题,但他们以黑客的形式解决了问题,而且 API 的解决方案版本较旧。这是我的主题属性和相关设置代码:
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>```
1)通过代码,您可以使用以下方式隐藏操作栏。
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
supportActionBar?.hide()
}
}
这一行 supportActionBar?.hide()
隐藏操作栏 only.see 附加图像。
2)通过XML同主题
首先在styles.xml中添加样式:
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
AndroidManifest.xml 并将其应用于要隐藏操作栏的 activity。
<activity
android:name=".MyActivity"
android:theme="@style/AppTheme.NoActionBar"/>
按照docs here, you need to use SYSTEM_UI_FLAG_HIDE_NAVIGATION
的顺序隐藏底部导航栏。他们还传递了 SYSTEM_UI_FLAG_FULLSCREEN
标志,因为在隐藏导航栏时也隐藏状态栏是一种很好的做法。
View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
如果我对问题的解释正确,您的要求不是隐藏状态栏,而是隐藏导航栏。所以,你不应该在任何地方传递全屏标志。从上面的代码片段中删除它,并从您的主题中删除 android:windowFullscreen
。这应该使状态栏像往常一样显示。
所以你的实际 uiOptions
会是
int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
注意: 如文档中所述,IMMERSIVE_STICKY 仅确保导航栏区域中的任何触摸 event/gesture 也被传输到应用程序。如果用户在那里滑动,它仍然会显示一个半透明的导航栏。如 other answers 中所述,如果没有某种形式的 root 访问权限,应该不可能完全删除它。
编辑: 我最初使用 AppCompatActivity
和默认的 Theme.AppCompat.Light.NoActionBar
主题对此进行了测试。还使用 OP 的 android:Theme.Material.Light.NoActionBar
进行了测试(需要使用 Activity
而不是 AppCompatActivity
)。他们两个都工作了。
我希望应用程序仅显示状态栏并使导航栏处于 IMMERSIVE_STICKY
模式。尝试了很多东西,但导航栏以某种方式保留并且状态栏被隐藏。 material 主题是否会影响全屏功能?
针对同一问题尝试了其他相关问题,但他们以黑客的形式解决了问题,而且 API 的解决方案版本较旧。这是我的主题属性和相关设置代码:
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>```
1)通过代码,您可以使用以下方式隐藏操作栏。
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
supportActionBar?.hide()
}
}
这一行 supportActionBar?.hide()
隐藏操作栏 only.see 附加图像。
2)通过XML同主题
首先在styles.xml中添加样式:
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
AndroidManifest.xml 并将其应用于要隐藏操作栏的 activity。
<activity
android:name=".MyActivity"
android:theme="@style/AppTheme.NoActionBar"/>
按照docs here, you need to use SYSTEM_UI_FLAG_HIDE_NAVIGATION
的顺序隐藏底部导航栏。他们还传递了 SYSTEM_UI_FLAG_FULLSCREEN
标志,因为在隐藏导航栏时也隐藏状态栏是一种很好的做法。
View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
如果我对问题的解释正确,您的要求不是隐藏状态栏,而是隐藏导航栏。所以,你不应该在任何地方传递全屏标志。从上面的代码片段中删除它,并从您的主题中删除 android:windowFullscreen
。这应该使状态栏像往常一样显示。
所以你的实际 uiOptions
会是
int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
注意: 如文档中所述,IMMERSIVE_STICKY 仅确保导航栏区域中的任何触摸 event/gesture 也被传输到应用程序。如果用户在那里滑动,它仍然会显示一个半透明的导航栏。如 other answers 中所述,如果没有某种形式的 root 访问权限,应该不可能完全删除它。
编辑: 我最初使用 AppCompatActivity
和默认的 Theme.AppCompat.Light.NoActionBar
主题对此进行了测试。还使用 OP 的 android:Theme.Material.Light.NoActionBar
进行了测试(需要使用 Activity
而不是 AppCompatActivity
)。他们两个都工作了。