在android kitkat中使用新的沉浸式模式
我想做一个活动,进入沉浸式模式,并在开始时隐藏顶部和按钮系统栏 在android的开发者网站上,他们说我应该使用在android kitkat中使用新的沉浸式模式,android,android-view,android-4.4-kitkat,Android,Android View,Android 4.4 Kitkat,我想做一个活动,进入沉浸式模式,并在开始时隐藏顶部和按钮系统栏 在android的开发者网站上,他们说我应该使用setSystemMiviability(),并提供SYSTEM\uUI\uFlag\uImmersive和SYSTEM\uUI\uFlag\uHide\uNavigation 如何在活动的OnCreate()方法中执行此操作?我认为Activity类中没有提供setSystemMiviability,它应该在视图中发生。有解决办法吗 更新 好的,根据DoorStick,我添加了以下行
setSystemMiviability()
,并提供SYSTEM\uUI\uFlag\uImmersive
和SYSTEM\uUI\uFlag\uHide\uNavigation
如何在活动的OnCreate()
方法中执行此操作?我认为Activity类中没有提供setSystemMiviability
,它应该在视图中发生。有解决办法吗
更新
好的,根据DoorStick,我添加了以下行,但我没有看到任何更改,导航栏和按钮仍然可见:
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
获取装饰视图:
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);
Chris Banes gist展示了一个很好的助手类,我们可以使用它为从蜂巢到棒棒糖的所有版本设置沉浸式模式 更新: 我试着从他的github repo中获取它以包含在我的项目中,但我必须将gist文件克隆到我的项目中并调整packagename。如果有人知道如何正确地将其作为依赖项,欢迎帮助我 我在我的FullScreenActivity中添加了它。我想使用浸入式粘滞模式,如下所示:
@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();
}
答案已经给出,但这里是如何利用沉浸式模式。 在您的活动中: 就在setContentview()之前 调用方法:toggleHideyBar() 遵循开发者android的文档,并在您的活动中复制此方法。更好,归功于:
您可以创建全局函数以进入沉浸式模式,如:
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可见性的更改。希望这能对您有所帮助。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>
谢谢,但您能举个例子说明如何实现这一点吗?请看我对这个问题的更新。是否可以从Android风格设置所有这些标志,这样我就不必从我的活动中调用它?因此,我可以为不同版本的Android设置不同的样式?我的应用程序使用webview,因此我必须使用.getRootView()而不是.getDecorView(),才能使其正常工作。对于某些Android版本(6.0.1,甚至安卓P),这似乎不适用于来电情况:。怎么会?有没有办法克服这个问题?你能添加一些关于如何使用这个helper类的详细信息吗?@swiscoder我已经创建了一个github项目,它允许你使用它作为Gradle依赖项:似乎它不适用于一些安卓版本(6.0.1,甚至安卓P),以防来电:。怎么会?有没有办法克服这个问题?似乎这种方法不适用于某些Android版本(6.0.1甚至Android P),如果有来电:。怎么会?有没有办法克服这个问题?
<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>