Android Java: ¿cómo evito que mi cuadro de diálogo muestre el nombre de la aplicación MainActivity brevemente cuando se cierra el cuadro de diálogo?


8

Soy bastante nuevo en el desarrollo de Android y he creado mi primera aplicación "real" que hace lo siguiente:

  • Lanza MainActivity
  • MainActivity procesa datos adicionales y luego muestra uno ViewDialogque se extiende Dialog. ViewDialogtiene un showDialog()método que hace lo siguiente para configurar y mostrar Dialog:

    protected void showDialog(final Activity activity)
    {
        dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(dialog_layout);
    
        // Set background color of the dialog
        ConstraintLayout currentLayout = (ConstraintLayout) dialog.findViewById(R.id.Dialog);
    
        // setup of views etc ...
    
        // Finally dislay `Dialog`
        dialog.show();
    
        // Method called to start a `DialogTimer` which extends `CountDownTimer`
    }
    
  • MainActivity muestra lo ViewDialogsiguiente:

     public class MainActivity extends AppCompatActivity {
         private static Context appContext;
         private static ViewDialog notify;
    
         protected void onCreate(Bundle savedInstanceState) {
    
             // methods and processing etc...        
    
             // time to display dialog 
             notify = new ViewDialog(mParameters, mThemeHandler );
    
             // ******************** Show dialog box *******************
             notify.showDialog(activity: this);   // showDialog just calls `Dialog.show()`
             notify.ApplyTheme();
         }
    
  • Cuando el temporizador expira o el usuario presiona un botón, ViewDialogse cierra y la aplicación finaliza con el siguiente código:

        mButton1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CancelTimer();
            activity.finishAndRemoveTask();
            dialog.dismiss();
    

El problema es que cuando ViewDialogse descarta, ocasionalmente puedo ver lo que parece un mensaje que muestra las actividades android:labelque se configuran en el archivo AndroidManifest.

Video de lo que esta sucediendo

No estoy seguro de por qué sucede esto, pero supongo que muestra algún elemento del MainActivitydiseño cuando se ViewDialogcierra y usa su propio dialog_layoutarchivo de diseño.

He jugueteado con tantas cosas diferentes y he cambiado códigos / diseños, etc. y no he podido encontrar mi error.

¿Cuáles son algunos consejos y sugerencias que me ayudarán a solucionar esto? Me complace proporcionar más detalles si es necesario.

El diseño y los archivos de manifiesto están aquí:


2
Cuando dices, "mostrando un mensaje", ¿qué estás viendo exactamente?
flopshot

2
¿Puedes publicar alguna captura de pantalla del mensaje que ves después de cerrar el diálogo?
Hamza

También en su archivo activity_main.xml ha colocado el ancho y la altura del diseño principal 0dp. Simplemente hágalo mach_parent para que pueda expandirse por toda la pantalla.
Hamza

1
@flopshot phone y tabletas con Android 5.1 y 9.0. Por cierto, también estoy en Las Vegas ... :-)
Quimera

1
ir a través de este enlace . Espero que encuentres algo útil
Alfaizkhan

Respuestas:


3

Puede lograr esto configurando el atributo android: theme en @android: style / Theme.NoTitleBar en su elemento en su AndroidManifest.xml de esta manera:

<activity android:name=".Activity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Gracias. Voy a darle una oportunidad.
Quimera

Intenté eso también. No funciono Gracias por intentarlo sin embargo. :-)
Quimera

Esto "funciona" pero también muestra la ventana principal de actividad antes de mostrar el diálogo. Quiero que la aplicación solo muestre el diálogo ...
Quimera

2

El código que ha publicado no es suficiente para descubrir por qué sucede esto, pero hay una solución universal para no ver el título de la Actividad (que se establece en el campo de etiqueta del manifiesto).

Declare en su styles.xml un nuevo tema como

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowContentOverlay">@null</item>
</style>

y luego haz que sea el tema de tu actividad como esta

 <activity
           ...
           android:name="boha.notify.MainActivity"
           android:theme="@style/AppTheme.NoActionBar">
           ...
</activity>

Si bien no estoy 100 por ciento seguro (porque este comportamiento puede modificarse en un código real de su actividad), creo que podría ayudar.

Espero que sea de ayuda.


Gracias Paul Voy a darle una oportunidad.
Quimera

Paul, lo intenté y no funcionó. Me di cuenta de que cuando establecí el título de la actividad, en el código usando setTitle()una cadena muy larga, pude ver muy claramente que el pequeño mensaje de "tostada" que se muestra cuando se cierra el diálogo es el título de la actividad principal. Voy a vincular a un video que muestra lo que está sucediendo pronto.
Quimera

Paul, ¿qué más de mi código necesitas ver? No puedo mostrar todo el código. Quizás crearé un ejemplo reproducible mínimo para publicar.
Quimera

2

Resulta que si cambio:

public class MainActivity extends AppCompatActivity {

a

public class MainActivity extends Activity {

El problema desaparece. No sé por qué, pero lo tomaré.


2
notify.setOnDissmissListener({CancelTimer()
    activity.finishAndRemoveTask()
    dialog.dismiss()})

1
Gracias. Voy a intentar esto también.
Quimera

1
Gracias de nuevo, lo intenté. No hizo ninguna diferencia. Debo estar haciendo algo fundamentalmente incorrecto.
Quimera
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.