¿Mostrar la vista por encima de la barra de estado?
Recientemente vi una imagen de una aplicación que era capaz de mostrar una vista por encima de la barra de estado y también fue capaz de cubrirlo con una vista.
Sé que puede obtener una vista justo debajo de la barra de estado desde una vista con alinear la parte superior de los padres. Pero, ¿cómo conseguir una vista en la parte superior de la barra de estado?
- Arrastrar y soltar en android 3.x causa illegalStateException después de pequeño número en arrastra
- Ver - buscando un evento como en (Ver) Destruido
- Ver onDraw (Canvas c) versus dibujar (Canvas c) en android?
- Cómo obtener un elemento de un niño en ExpandableListView?
- Android define la altura y el ancho de Vista personalizada mediante programación
Ejemplo
- Cómo obtener la vista del grupo en la lista expandiblelist en android?
- Android Cómo obtener una vista previa de una imagen, utilizando su ruta de acceso desde SDcard, desde mi aplicación
- Id de vista siguiente como un atributo personalizado en android
- WebView de Android - Dithering / Cambios al tacto
- ¿Cómo crear Clone-Duplicate View?
- WebViewClient no se puede resolver con un tipo
- Obtener la vista de los padres desde un diseño
- ¿Hay una manera de desplazarse mediante programación una vista de desplazamiento a un texto de edición específico?
La respuesta por @Sadeshkumar es incorrecta para ICS y arriba (quizás GB también).
Una vista creada con TYPE_SYSTEM_ALERT
y FLAG_LAYOUT_IN_SCREEN
está cubierta por StatusBar
.
Para obtener una superposición en la parte superior de la StatusBar
de StatusBar
, debe utilizar TYPE_SYSTEM_OVERLAY
lugar de TYPE_SYSTEM_ALERT
.
El problema es entonces, ¿cómo obtener clics / toques?
Deshabilitar la barra de estado del sistema: sin raíz
Después de dos días completos de búsqueda a través de mensajes SO y la lectura de los documentos Android una y otra vez .. Aquí está la solución que me ocurrió. (Probado)
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);
No se olvide de los permisos:
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
Nota:
Probado hasta kitkat.
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);
Una vista creada con TYPE_SYSTEM_ERROR
y FLAG_LAYOUT_IN_SCREEN
está cubierta por StatusBar
.
- Cómo comparar los objetos de contexto de las dos actividades diferentes ..?
- ¿Es Retrofit + Okhttp usando httpCaching como un valor predeterminado en Android?