Android - 为带有导航抽屉和应用栏的应用完全隐藏状态和导航栏
Posted
技术标签:
【中文标题】Android - 为带有导航抽屉和应用栏的应用完全隐藏状态和导航栏【英文标题】:Android - hide status and navigation bar completely for an app with nav drawer and app bar 【发布时间】:2020-08-17 18:17:43 【问题描述】:如何动态隐藏状态和导航栏完全?
该应用包含一个带有应用栏/工具栏和 FAB 按钮的常规导航抽屉。
切换到全屏时,导航和状态栏的内容会滚开。屏幕上留下两个空条。我希望那些空栏隐藏起来。
我创建了一个minimal demo app。左侧是常规应用程序。在推动晶圆厂时,应用程序应全屏显示。
我怎样才能让酒吧隐藏?
问题:请写出最小演示项目中需要哪些更改?
更新了第二个解决方案:
@Roaim 提供的 GREAT 解决方案有效。基本是将 android:fitsSystemWindows 布局属性设置为 false。
如果您仍然无法显示和隐藏状态/导航栏,此解决方案可能会帮助您。
完全隐藏栏:
public static void hideSystemUI()
if (getSupportActionBar() != null)
getSupportActionBar().hide();
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
并显示所有条形:
public static void showSystemUI()
if (getSupportActionBar() != null)
getSupportActionBar().show();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
【问题讨论】:
【参考方案1】:更新
问题在于您的布局文件。我只是设置android:fitsSystemWindows=false
来解决这个问题。我为您的仓库创建了pull request,我认为这可以解决您的问题。
您应该遵循以下官方文档:
Hide the status bar Hide the navigation bar在 Android 4.0 及更低版本上隐藏状态栏
public class MainActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// If the Android version is lower than Jellybean, use this call to hide
// the status bar.
if (Build.VERSION.SDK_INT < 16)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
...
在 Android 4.1 及更高版本上隐藏状态栏
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
隐藏导航栏
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);
【讨论】:
G R E A T !!!非常感谢!我授予解决+向上+赏金。恭喜。【参考方案2】:进入价值观>风格
现在在应用主题中使用
让导航栏转换
<item name="android:windowTranslucentNavigation">true</item>
要删除它,使其颜色与您的布局相匹配
<item name="android:navigationBarColor">@color/white</item>
或者试试这个
public void FullScreencall()
if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) // lower api
View v = this.getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
else if(Build.VERSION.SDK_INT >= 19)
//for new api versions.
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
【讨论】:
请检查编辑并更新我它是否有效? 我已经编辑了我的答案,请检查并给我更新它是否有效? 谢谢。 1) windowTranslucentNavigation 不会删除它,但允许使用不同的背景颜色。 2) navigationBarColor 给字母另一种颜色,而不是背景。并且下面的内容没有显示。 3)我尝试了你的方法,我猜它可以工作到 Android 10。答案 3 我已经尝试过,请参阅我的问题。唉。 太棒了!现在,我们可以说你已经找到了答案。干杯!【参考方案3】:试试这个...
<style name="MyApp" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
...
</style>
【讨论】:
以上是关于Android - 为带有导航抽屉和应用栏的应用完全隐藏状态和导航栏的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Android 电视应用程序及其侦听器创建导航菜单抽屉