Скрыть системную панель в планшетах
На моем планшете есть следующая панель для управления домом, домом и т. Д. (Я не знаю правильное имя, строка состояния? Панель управления? Панель действий? Или другое)
В программе используется следующий метод, чтобы иметь полный экран.
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.PROGRESS_INDETERMINATE_OFF);
Но я не знаю, почему бар все еще здесь. Из-за этого у меня не может быть правильного размера экрана.
Кто подскажет как это убрать?
9 ответов
В планшетах под управлением Android 4+ скрыть панель системы / навигации невозможно.
Из документации (Элементы управления для видимости системы пользовательского интерфейса):
SYSTEM_UI_FLAG_HIDE_NAVIGATION
это новый флаг, который просит панель навигации полностью скрыться. Имейте в виду, что это работает только для панели навигации, используемой некоторыми телефонами (она не скрывает системную панель на планшетах).
Однако вы можете попытаться затемнить системную панель, как это иногда делается во время игр и воспроизведения видео.
SYSTEM_UI_FLAG_LOW_PROFILE
флаг заменяет флаг STATUS_BAR_HIDDEN. Когда этот флаг установлен, он включает режим "низкого профиля" для системной панели или панели навигации. Кнопки навигации затемняются и другие элементы на системной панели также скрываются. Включение этого параметра полезно для создания более захватывающих игр без отвлечения кнопок системной навигации.
Кажется, для этого есть флагUNDOCUMENTED:
yourGreatView.setSystemUiVisibility(8);
- нет черного нижнего колонтитула ("скрытая" системная строка)
- изменяет размер, если появляется клавиатура (нет перекрывающихся входов)
Проверено на Android 4.1.2 (API 16)
Проверено на Android 4.1.1 (API 16)
Проверено не работает на Android 4.0.4 (API 15)
(все таблетки)
В Android 4.4 и выше вы можете полностью скрыть панель навигации и оставить ее скрытой, используя сочетание полноэкранного режима и погружения:
@Override
protected void onResume() {
super.onResume();
View decorView = getWindow().getDecorView();
decorView.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_STICKY);
}
public class Utils {
public static void hideNavigations(Activity context) {
View decorView = context.getWindow().getDecorView();
decorView.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_STICKY);
}
}
В вашей деятельности:
@Override
protected void onResume() {
super.onResume();
Utils.hideNavigations(this);
}
Очень ядерный вариант - просто удалить SystemUI.apk из /system/app/. Но предупреждение об этом полностью удалит его из планшета. Я делаю это на планшете, который я использую для киоска на передней панели, затем я настроил планшет для загрузки в мое приложение.
Как говорят другие люди, используйте команду "pm disable com.android.systemui" в режиме root, поэтому следующий код выполняет эту команду в вашем приложении для Android, просто вызовите следующий метод, ваш планшет должен быть рутирован.
private void hideNavigationBar(){
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("pm disable com.android.systemui\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
//////////////////////////////////////
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Этот код скрывает панель навигации в системе Android, чтобы вновь отобразить системную панель, используйте "pm enable com.android.systemui" вместо "pm disable com.android.systemui" в предыдущем коде.
Ниже код работал для меня -
Вы можете написать это в onCreate() или onResume(при необходимости)
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
Поскольку системная панель используется для навигации в Android, это не простой способ добиться этого, вы можете отключить / затемнить элементы управления:
View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
Но вы можете получить размер экрана без системной панели (не знаю, с какой версии, я думаю, 3.1)
Method rawW = Display.class.getMethod("getRawWidth");
Method rawH = Display.class.getMethod("getRawHeight");
int width = (Integer)mGetRawW.invoke(dp);
int height = (Integer)mGetRawH.invoke(dp);
Если ваше приложение имеет root-доступ, есть также способ добиться этого: http://ppareit.github.com/HideBar/
Вы не можете скрыть это, но вы можете просто отключить это, кроме дома. Попробуйте эту ссылку., Используя SYSTEM_UI_FLAG_LOW_PROFILE, вы можете затемнить свою системную панель и использовать onWindowFocusChanged()
может взять фокус и свернуть его.