我目前正在为Nexus 7平板电脑编写一款具有完全全屏体验的Android应用程序(系统栏和导航栏不会显示,直到用户向下滑动)。
出于某种原因,当我切换活动时,导航栏会重新出现。
要创建全屏效果,我将系统UI可见性设置为每个活动的onResume()
中的预定选项,注册UI更改侦听器,并注册窗口焦点侦听器。
用户界面选项
private View decorView = getWindow().getDecorView();
private int uiOptions = 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
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
在onResume()
中设置系统UI Visibilility@Override
protected void onResume() {
super.onResume();
decorView.setSystemUiVisibility(uiOptions);
}
在UI更改时设置系统UI可见性
decorView.setOnSystemUiVisibilityChangeListener (
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int pVisibility) {
if ((pVisibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.setSystemUiVisibility(uiOptions);
}
}
});
窗口具有焦点时设置系统UI可见性
@Override
public void onWindowFocusChanged(boolean pHasFocus) {
super.onWindowFocusChanged(pHasFocus);
if(pHasFocus) {
decorView.setSystemUiVisibility(uiOptions);
}
}
以上所有内容都是在应用程序的每个活动中完成的,以确保 当键盘消失,活动恢复,隐藏导航栏和状态栏, 等
但是,当我切换时,我仍然遇到导航栏短暂出现的问题 活动。
非常感谢任何帮助!谢谢。
答案 0 :(得分:3)
您需要使用主题进行应用程序和活动样式,如下所述:android:theme="@android:style/Theme.NoTitleBar.Fullscreen" works on Application level but not at the activity level. Any clue?。这些是在创建视图时应用的,而不是像在你那样在onResume中创建后删除它们。
基本上,您需要为没有标题栏/操作栏的应用程序设置主题(如果您已经有主题,请将其扩展为此主题):
<application
...
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</application>
同样适用于每项活动:
<activity
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
...
</activity>
在活动中创建:
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
答案 1 :(得分:0)
我设法解决了我的问题,并删除了我在应用中的一些不必要的代码片段。
全屏制作应用 - 包括隐藏导航和状态栏 - 涉及很多部分:
将Android清单中的应用主题设置为&#34; Theme.NoTitleBar.Fullscreen&#34;
(在AndroidManifest.xml中完成)
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
为窗口装饰视图和UI选项创建全局变量
(完成所有活动的编程方面)
private View decorView;
private int uiOptions;
注意:在onCreate()
之前不要定义
定义decorView和uiOptions并调用函数在onCreate()中创建UI更改侦听器
(完成所有活动的编程方面)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
decorView = getWindow().getDecorView();
uiOptions = 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
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
createUiChangeListener();
}
在onResume()中设置系统UI可见性
(完成所有活动的编程方面)
@Override
protected void onResume() {
super.onResume();
decorView.setSystemUiVisibility(uiOptions);
}
从onCreate()调用的createUiChangeListener()函数的代码
(完成所有活动的编程方面)
private void createUiChangeListener() {
decorView.setOnSystemUiVisibilityChangeListener (
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int pVisibility) {
if ((pVisibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.setSystemUiVisibility(uiOptions);
}
}
});
}