Android: показать/скрыть строку состояния/панель питания
Я пытаюсь создать кнопку, где я могу скрыть или показать строку состояния на моем планшете.
Я включил onCreate
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
и в кнопках
показать:
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
шкура:
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
Любые подсказки/подсказки?
//редактировать
Я посмотрел на этот намек здесь: http://android.serverbox.ch/?p=306
и изменил мой код следующим образом:
private void hideStatusBar() throws IOException, InterruptedException {
Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 79 s16 com.android.systemui"});
proc.waitFor();
}
private void showStatusBar() throws IOException, InterruptedException {
Process proc = Runtime.getRuntime().exec(new String[]{"am","startservice","-n","com.android.systemui/.SystemUIService"});
proc.waitFor();
}
Итак, если я нажимаю на свои кнопки, вызываются методы, я вижу, что что-то происходит, потому что приложение ждет несколько секунд.
Я также посмотрел на LockCat и увидел, что что-то происходит.
показать: http://pastebin.com/CidTRSTi
hide: http://pastebin.com/iPS6Kgbp
Ответы
Ответ 1
У вас есть полноэкранная тема, установленная в манифесте?
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Я не думаю, что вы сможете войти в полноэкранный режим без этого.
Я бы использовал следующее, чтобы добавить и удалить флаг полноэкранного режима:
// Hide status bar
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Show status bar
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Ответ 2
Для некоторых людей отображение строки состояния путем очистки FLAG_FULLSCREEN может не работать,
Вот решение, которое сработало для меня, (Документация) (Ссылка флага)
Скрыть строку состояния
// Hide Status Bar
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else {
View decorView = getWindow().getDecorView();
// Hide Status Bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
Показать строку состояния
if (Build.VERSION.SDK_INT < 16) {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else {
View decorView = getWindow().getDecorView();
// Show Status Bar.
int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
decorView.setSystemUiVisibility(uiOptions);
}
Ответ 3
Одна из функций, представленных в KitKat, - Иммерсивный режим. Режим Immersive дает пользователю возможность отображать/скрывать строку состояния и навигационную панель с помощью салфетки. Чтобы попробовать, нажмите кнопку "Toggle immersive mode", а затем попробуйте вставлять и вынимать панель!
Пример:
public void toggleHideyBar() {
int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility();
int newUiOptions = uiOptions;
boolean isImmersiveModeEnabled =
((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
if (isImmersiveModeEnabled) {
Log.i(TAG, "Turning immersive mode mode off. ");
} else {
Log.i(TAG, "Turning immersive mode mode on.");
}
// Navigation bar hiding: Backwards compatible to ICS.
if (Build.VERSION.SDK_INT >= 14) {
newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
// Status bar hiding: Backwards compatible to Jellybean
if (Build.VERSION.SDK_INT >= 16) {
newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
}
if (Build.VERSION.SDK_INT >= 18) {
newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
}
getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
//END_INCLUDE (set_ui_flags)
}
Ответ 4
Для пользователей Kotlin
ПОКАЗЫВАТЬ
activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
ПРЯТАТЬСЯ
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
Ответ 5
Ссылка - https://developer.android.com/training/system-ui/immersive.html
// This snippet shows the system bars. It does this by removing all the flags
// except for the ones that make the content appear under the system bars.
private void showSystemUI() {
mDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
Ответ 6
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//hide status bar
requestWindowFeature( Window.FEATURE_NO_TITLE );
getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN );
setContentView(R.layout.activity_main);
}
Ответ 7
fun Activity.setStatusBarVisibility(isVisible: Boolean) {
//see details https://developer.android.com/training/system-ui/immersive
if (isVisible) {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
} else {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
}
Ответ 8
используется для колина в Android для скрытия строки состояния в колине нет необходимости использовать точку с запятой (;) в конце строки
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
в Android с использованием языка Java для скрытой строки состояния
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Ответ 9
с помощью этого метода, используя SYSTEM_UI_FLAG_IMMERSIVE_STICKY, полный экран возвращается одним нажатием без какой-либо реализации. Просто скопируйте этот метод ниже и назовите его там, где вы хотите в своей деятельности. Подробнее здесь
private void hideSystemUI() {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}