Использование нового режима IMMERSIVE в android kitkat
Я хочу сделать операцию, чтобы перейти в режим IMMERSIVE и скрыть верхние и нижние системные панели сразу после ее запуска.
В сайте разработчиков Android говорится, что я должен использовать setSystemUiVisibility()
и предоставлять SYSTEM_UI_FLAG_IMMERSIVE
и SYSTEM_UI_FLAG_HIDE_NAVIGATION
.
Как я могу сделать это в методе OnCreate()
активности? Я думаю, что setSystemUiVisibility
не указан в классе Activity, и это должно произойти в представлении. Есть ли способ обхода?
UPDATE
ok В соответствии с doorstuck я добавил следующие строки, но я не вижу никаких изменений, панели навигации и кнопки buttom все еще видны:
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
Ответы
Ответ 1
Получить представление декора:
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);
Ответ 2
Chris Banes gist показывает хороший класс помощников, который мы можем использовать, чтобы установить режим погружения для всех версий из HoneyComb в Lollipop https://gist.github.com/chrisbanes/73de18faffca571f7292.
Обновление:
Я попробовал получить его из своего репетитора github, чтобы включить его в свой проект, но мне пришлось клонировать файлы gist в свой проект и приспосабливать пакет. Если кто-то знает, как правильно включить его в качестве зависимости, пожалуйста, помогите мне.
Я добавил его в свой 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();
}
Ответ 3
Гораздо приятнее и благодарен Уильям Дж. Фрэнсис:
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(){
...
}
}
Ответ 4
Вы можете создать глобальную функцию, чтобы перейти в режим погружения, например:
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;
}
Вышеуказанный код также будет управлять изменением видимости интерфейса пользователя. Надеюсь, это поможет вам.
Ответ 5
Ответ уже задан, но вот Как использовать режим Immersive.
В вашей деятельности:
непосредственно перед setContentview().......
вызов метода: toggleHideyBar();
Следуйте документации документации от разработчика android и скопируйте этот метод в своей деятельности.
Ответ 6
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>