Скрыть строку состояния в 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);
 }
Другие вопросы по тегам