Скрыть строку состояния в Android 4.4+ или KitKat с полноэкранным
Я использую следующий код для сокрытия строки состояния в полноэкранном режиме:
void HideEverything(){
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
}
}
В полноэкранном режиме отображается экран, но когда я касаюсь строки состояния, отображается строка состояния. Я пробовал другие варианты добавить полноэкранный режим без темы заголовка в приложении и уровень активности в манифесте, но результаты все те же...:(
Я не хочу показывать строку состояния на любом этапе. Как добиться этого в Android?
Редактировать:
Версия ОС Android - 4.4.2 (код выше работает на 4.3, но не на 4.4.2)
Обновить:
Проблема решена... Ответ написан ниже отдельно...
4 ответа
Решение проблемы не работает, поскольку версия Android - 4.4.2.
Как прокомментировал @Academy of Programmer; это решение не работает на Android 6 и выше.
Но согласно предложению Sunny
, проблема была решена путем предотвращения расширения строки состояния.
Решение:
Написать в строке customViewGroup
класс в вашей основной деятельности.
public class customViewGroup extends ViewGroup {
public customViewGroup(Context context) {
super(context);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.v("customViewGroup", "**********Intercepted");
return true;
}
}
Теперь в вашем onCreate
метод mainActivity
добавить следующий код перед setContentView()
:
WindowManager manager = ((WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE));
WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
localLayoutParams.gravity = Gravity.TOP;
localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
// this is to enable the notification to receive touch events
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
// Draws over status bar
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
localLayoutParams.height = (int) (50 * getResources()
.getDisplayMetrics().scaledDensity);
localLayoutParams.format = PixelFormat.TRANSPARENT;
customViewGroup view = new customViewGroup(this);
manager.addView(view, localLayoutParams);
Выше код отключит расширение строки состояния. Теперь сделайте полный экран, следуя коду, добавьте его чуть ниже приведенного кода и перед setContentView
:
//fullscreen
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Теперь в декларации добавить разрешение:
<!-- prevent expanding status bar -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
и вы сделали....:)
недостаток: этот код disables expansion of status bar for the device
не только для деятельности или приложения, так что используйте его, если вам действительно это нужно.
Спасибо за все решения и предложения...:)
Мы не можем предотвратить отображение статуса в полноэкранном режиме на устройствах kitkat или выше, поэтому попробуйте взломать, чтобы заблокировать расширение строки состояния.
Для идеи, поместите наложение на строку состояния и используйте все входные события. Это предотвратит расширение строки состояния.
Используя приведенный ниже код, вы можете использовать полный экран;
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Напишите ниже код над setcontentview.
Примечание: не придавайте никакого значения этой деятельности.
Надеюсь это поможет.
Используйте следующий код на создание
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}