我想让活动进入IMMERSIVE模式,并在它开始时立即隐藏top和buttom系统栏。
在Android的开发者网站中,他们说我应该使用setSystemUiVisibility()
并提供SYSTEM_UI_FLAG_IMMERSIVE
和SYSTEM_UI_FLAG_HIDE_NAVIGATION
。
如何在活动的OnCreate()
方法中执行此操作?我认为Activity类中没有提供setSystemUiVisibility
,它应该在视图中发生。有解决方法吗?
更新
ok根据门把我添加了以下行,但我没有看到任何更改,导航栏和按钮按钮仍然可见:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
}
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE);
}
//Rest of activity code
答案 0 :(得分:44)
获取装饰视图:
getWindow().getDecorView().setSystemUiVisibility(...)
请记住,参数是位标志。只调用上面的方法一次:
getWindow().getDecorView().setSystemUiVisibility(
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);
答案 1 :(得分:5)
Chris Banes的主题展示了一个很好的帮助程序类,我们可以用它来为HoneyComb到Lollipop https://gist.github.com/chrisbanes/73de18faffca571f7292的所有版本设置沉浸式模式。
更新: 我尝试从他的github repo中获取它以包含在我的项目中,但我必须将gist文件克隆到我的项目中并调整packagename。如果有人知道如何将其作为依赖项妥善包含,欢迎帮助我。
我在我的FullScreenActivity中添加了它想要像这样使用ImmersiveStickyMode:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
final int flags = 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;
SystemUiHelper uiHelper = new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags);
uiHelper.hide();
}
答案 2 :(得分:2)
对William J. Francis更好,更有信誉:
public class GameActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/* my code you dont need this
assets=getAssets();
sGame= new GameView(this, GAME_WIDTH, GAME_HEIGHT);
setContentView(sGame);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
*/
getWindow().getDecorView().setSystemUiVisibility(
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 // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
@Override
protected void onDoSomethingOtherImportantThing(){
...
}
}
答案 3 :(得分:2)
您可以创建全局功能以进入沉浸式模式,如:
public static void enableImmersiveMode(final View decorView) {
decorView.setSystemUiVisibility(setSystemUiVisibility());
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.setSystemUiVisibility(setSystemUiVisibility());
}
}
});
}
public static int setSystemUiVisibility() {
return 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;
}
上面的代码还将控制系统UI可见性的变化。希望这会对你有所帮助。
答案 4 :(得分:0)
已经给出了答案,但如何利用沉浸式模式。
在您的活动中:
就在setContentview().......
之前调用方法:toggleHideyBar();
关注Developer android中的文档documentation ,并在Activity中复制此方法。
答案 5 :(得分:0)
android:immersive =“ true” 将隐藏底部系统栏
<application>
<activity
android:name=".CarrierActivity"
android:label="@string/app_name"
android:excludeFromRecents="true"
android:immersive="true"
android:configChanges="orientation|keyboardHidden|screenSize">
<intent-filter>
<action android:name="com.example.SetupWiz.SUW_CARRIER"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>