Отображать вид над строкой состояния? - PullRequest
9 голосов
/ 22 марта 2012

Недавно я видел изображение приложения, которое могло отображать представление над строкой состояния, а также могло покрывать его видом.

Я знаю, что вы можете получить представление прямо под статусом.бар из вида с выравниванием родительской вершины.Но как бы вы увидели верхнюю часть строки состояния ??

Пример

Ответы [ 4 ]

28 голосов
/ 19 августа 2014

Отключить строку состояния системы - без рута


После двух полных дней поиска в SO сообщениях и многократного чтения документов Android. Вот решение, которое я придумала. (Проверено)

    mView= new TextView(this);                                       
    mView.setText(".........................................................................");                       

    mLP = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            100,
            // Allows the view to be on top of the StatusBar
            WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
            // Keeps the button presses from going to the background window
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
            // Enables the notification to recieve touch events
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
            // Draws over status bar
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSLUCENT);

    mLP.gravity =  Gravity.TOP|Gravity.CENTER;      

    mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    mWindowManager.addView(mView, mLP);

Не забудьте разрешения:

<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

Примечание:
Протестировано до киткат.

12 голосов
/ 01 декабря 2012

Ответ @Sadeshkumar неверен для ICS и выше (возможно, также и для GB).

Представление, созданное с помощью TYPE_SYSTEM_ALERT и FLAG_LAYOUT_IN_SCREEN, покрывается StatusBar.

Чтобы получить оверлей поверх StatusBar, вам нужно использовать TYPE_SYSTEM_OVERLAY вместо TYPE_SYSTEM_ALERT.

Проблема в том, как получить щелчки / прикосновения?

6 голосов
/ 06 сентября 2013

Представление, созданное с помощью TYPE_SYSTEM_ERROR и FLAG_LAYOUT_IN_SCREEN, покрывается StatusBar.

4 голосов
/ 22 марта 2012
 int statusBarHeight = (int) Math.ceil(25 * getResources().getDisplayMetrics().density);


  View statusBarView = new View(MyActivity.this);
  statusBarView.setBackgroundColor(Color.GREEN);


  WindowManager.LayoutParams params = null;
  params = new WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT,statusBarHeight,WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.RIGHT | Gravity.TOP;
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    wm.addView(statusBarView, params);  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...