Android Java: Wie kann ich verhindern, dass in meinem Dialogfeld der Name der MainActivity-App kurz angezeigt wird, wenn der Dialog geschlossen wird?

8

Ich bin ziemlich neu in der Android-Entwicklung und habe meine erste "echte" Anwendung erstellt, die Folgendes tut:

  • Startet MainActivity
  • MainActivity verarbeitet zusätzliche Daten und zeigt dann ein ViewDialogerweitertes an Dialog. ViewDialoghat eine showDialog()Methode, die Folgendes ausführt, um Folgendes einzurichten und anzuzeigen 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 zeigt ViewDialogFolgendes:

     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();
         }
    
  • Wenn der Timer abläuft oder der Benutzer eine Taste drückt, ViewDialogwird die geschlossen und die Anwendung mit dem folgenden Code beendet:

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

Das Problem ist, dass ViewDialogich beim Entlassen gelegentlich sehen kann, wie eine Nachricht aussieht, in der die Aktivitäten android:labelangezeigt werden, die in der AndroidManifest-Datei eingerichtet sind.

Video von dem, was passiert

Ich bin mir nicht sicher , warum dies geschieht, aber ich davon ausgehen , es ist eine Sache des Anzeige - MainActivityLayouts , wenn die ViewDialogschließt , dass es seine eigene verwendet dialog_layoutLayout - Datei.

Ich habe mit so vielen verschiedenen Dingen herumgespielt und Code / Layouts usw. geändert, und ich konnte meinen Fehler nicht finden.

Welche Hinweise und Hinweise helfen mir, dies zu beheben? Gerne stelle ich Ihnen bei Bedarf weitere Details zur Verfügung.

Das Layout und die Manifestdateien finden Sie hier:

Chimäre
quelle
2
Wenn Sie "Anzeige einer Nachricht" sagen, was genau sehen Sie?
Flopshot
2
Können Sie einen Screenshot der Nachricht veröffentlichen, die Sie sehen, nachdem Dialog geschlossen wurde?
Hamza
Außerdem haben Sie in Ihrer Datei activity_main.xml Breite und Höhe des Hauptlayouts 0dp platziert. Machen Sie es einfach mach_parent, damit es sich über den gesamten Bildschirm ausdehnen kann.
Hamza
1
@flopshot Telefon und Tablets mit Android 5.1 und 9.0. Übrigens bin ich auch in Las Vegas .... :-)
Chimera
1
gehe durch diesen Link . Ich hoffe, Sie finden etwas Nützliches
Alfaizkhan

Antworten:

3

Sie können dies erreichen, indem Sie das Attribut android: theme auf @android: style / Theme.NoTitleBar für Ihr Element in Ihrer AndroidManifest.xml wie folgt festlegen:

<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>
Alfaizkhan
quelle
Vielen Dank. Ich werde es versuchen.
Chimäre
Versuchte das auch. Hat nicht funktioniert. Danke, dass du es versucht hast. :-)
Chimera
Dies "funktioniert", zeigt aber auch das Hauptaktivitätsfenster an, bevor der Dialog angezeigt wird. Ich möchte, dass die App nur den Dialog anzeigt ...
Chimera
2

Der Code, den Sie gepostet haben, reicht nicht aus, um herauszufinden, warum dies geschieht, aber es gibt eine universelle Lösung, um den Aktivitätstitel nicht anzuzeigen (der im Beschriftungsfeld des Manifests festgelegt ist).

Deklarieren Sie in Ihrer styles.xml ein neues Thema wie

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

und danach machen Sie es zum Thema Ihrer Aktivität wie diese

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

Ich bin mir zwar nicht hundertprozentig sicher (da dieses Verhalten in einem tatsächlichen Code Ihrer Aktivität geändert werden kann), aber ich denke, es könnte helfen.

Ich hoffe es wird helfen.

Pavlo Ostasha
quelle
Danke Paul. Ich werde es versuchen.
Chimäre
Paul, das habe ich versucht und es hat nicht funktioniert. Ich habe festgestellt, dass ich beim Festlegen des Titels der Aktivität im Code mit setTitle()einer sehr langen Zeichenfolge sehr deutlich sehen konnte, dass die kleine "Toast" -ähnliche Meldung, die beim Schließen des Dialogfelds angezeigt wird, der Titel der Hauptaktivität ist. Ich werde auf ein Video verlinken, das zeigt, was bald passiert.
Chimäre
Paul, was müssen Sie sonst noch von meinem Code sehen? Ich kann nicht den gesamten Code anzeigen. Vielleicht erstelle ich ein minimal reproduzierbares Beispiel zum Posten.
Chimäre
2

Es stellt sich heraus, dass, wenn ich mich ändere:

public class MainActivity extends AppCompatActivity {

zu

public class MainActivity extends Activity {

Das Problem verschwindet. Ich weiß nicht warum, aber ich werde es nehmen.

Chimäre
quelle
2
notify.setOnDissmissListener({CancelTimer()
    activity.finishAndRemoveTask()
    dialog.dismiss()})
Shahriyar Aghajani
quelle
1
Vielen Dank. Ich werde es auch versuchen.
Chimäre
1
Nochmals vielen Dank, ich habe es versucht. Machte keinen Unterschied. Ich muss etwas grundlegend Falsches tun.
Chimäre