android - programacion - Crear un diálogo transparente en la parte superior de la actividad
manual de programacion android pdf (2)
Fondo
Estoy tratando de poner una capa en la parte superior de la actividad actual que tendría una explicación de lo que está sucediendo en la pantalla actual, similar a lo que ocurre en contacto + aplicación .
Sé que hay algunas soluciones para esto (como la biblioteca showCase y la biblioteca superToolTips), y también sé que puedo crear una vista y configurarla en la ventana de la actividad, pero necesito poner un conjunto capa de diálogo en la parte superior.
Problema
No importa lo que intento, cada solución no funciona de la manera que necesito para que funcione.
en resumen, lo que necesito es:
cuadro de diálogo de pantalla completa.
no hay cambios (no visuales ni lógicos) en la barra de acciones, la barra de notificaciones y el contenido de la actividad detrás, lo que significa que todo lo que está detrás del cuadro de diálogo permanece igual, se mostró un momento antes de que se mostrara el diálogo.
ser transparente a excepción de las vistas que uso para el diálogo, que debe mostrarse normalmente.
lo que he intentado
Tristemente, siempre obtuve solo una parte de las cosas que necesitaba.
aquí está mi código:
styles.xml:
<style name="full_screen_dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
MainActivity.java:
...
final Dialog dialog = new Dialog(this, R.style.full_screen_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setFormat(PixelFormat.TRANSLUCENT);
dialog.show();
Este código colocará el diseño en la parte superior de la actividad, pero lamentablemente no tiene ninguna transparencia, aunque lo haya configurado. El diseño que he usado es muy simple y es por eso que no lo publico.
Pregunta
Qué me estoy perdiendo ? ¿Qué se debe hacer para arreglar el código?
¿Cómo puedo hacer que el diálogo sea transparente, a pantalla completa Y que no cambie la barra de acciones ni la barra de notificaciones?
Solución de trabajo
EDITAR: después de encontrar una buena solución, aquí está el código de trabajo:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
final Window window = dialog.getWindow();
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
¡Solo agrega esto, realmente funciona!
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowCloseOnTouchOutside">true</item>
<item name="android:windowBackground">@android:drawable/alert_dark_frame</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
Simplemente cambie el color de fondo de su Diálogo:
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Editar:
Esto evita el efecto tenue:
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);