2

Ich habe eine App, die TabLayout und Fragmente verwendet, aber meine erste Anmeldung Bildschirm ist eine Standard-Aktivität. Wenn ich auf dem Anmeldebildschirm einen Alarmdialog zeige, unterscheidet sich das Aussehen des Dialogs vollständig von dem, wenn ich einen innerhalb eines Fragments zeige.Android: AlertDialog sieht anders in Fragment

Von Anmeldebildschirm

enter image description here

Aus dem Inneren des Fragments

enter image description here

Der Code, den ich die Alertdialog zu zeigen, verwenden die folgende Klasse

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.graphics.Typeface; 
import android.widget.Button; 
import android.widget.TextView; 

class AlertDialogManager { 

    private AlertDialog alertDialog; 
    private Context mContext; 

    public void showAlertDialog(final Activity activity, String title, String message, Boolean status, final Boolean finishOnClose) { 
     // Set our context correctly based on what was passed in activity 
     mContext = (activity.getParent()!=null) ? mContext = activity.getParent() : activity; 

     // Create our alertDialog Builder 
     alertDialog = new AlertDialog.Builder(mContext).create(); 

     // Setting Dialog Title 
     alertDialog.setTitle(title);   

     // Setting Dialog Message 
     alertDialog.setMessage(message); 

     // Setting alert dialog icon 
     if(status != null) alertDialog.setIcon((status) ? R.drawable.icon_check : R.drawable.icon_alert); 

     // Setting OK Button 
     alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // if the user passed in TRUE for the finishOnClose param - we call try onBackPressed first and if that fails, call finish() 
       if (finishOnClose) { 
        try { 
         activity.onBackPressed(); 
        } catch (Exception e) { 
         activity.finish(); 
        }    
       } 
      } 
     }); 

     // Showing Alert Message 
     alertDialog.show(); 
    } 
} 

Um eine in einer Aktivität zu zeigen, dass ich die folgenden Befehle verwenden:

// At the top of my activity I declare 
private final AlertDialogManager alertDialog = new AlertDialogManager(); 

// Then where I want to show one I use this 
alertDialog.showAlertDialog(MyActivity.this, "Title", "Message", false, false); 

man in einem Fragment Um zu zeigen, ich folgendes verwenden:

// At the top of my fragment I declare 
private final AlertDialogManager alertDialog = new AlertDialogManager(); 

alertDialog.showAlertDialog(getActivity(), "Title", "Message", false, false); 

jemand erklären kann, warum ich die 2 bekommen würde vollständig verschiedene "Themen" in meinem Dialog beim Aufruf von einer Aktivität vs Fragment? Ich bin ratlos.

danke !!!

+0

zwei verschiedene Versionen von Android hinzuzufügen benötigt? – Blackbelt

+0

@Blackbelt - wie kann ich das überprüfen? Ich habe die compileSdkVersion als 23, minSdkVersion als 19 und targetSdkVersion als 23 - meine build.gradle – Phil

+0

ich meine auf dem Gerät, auf dem Sie die App laufen. Welche Version von AlertDialog verwenden Sie? 'v7.app.AlertDialog'? Überprüfen Sie Ihre Importe – Blackbelt

Antwort

2

Was ist die ältere API-Version, die Sie unterstützen? weil Sie den AlertDialog-Build seit der API 11 verwenden können. Wenn Sie ältere Versionen unterstützen, müssen Sie das Design festlegen.

Beispiel:

ContextThemeWrapper theme; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     theme = new ContextThemeWrapper(context, android.R.style.Theme_Holo_Light_Dialog_NoActionBar); 
    } 
    else { 
     theme= new ContextThemeWrapper(context, android.R.style.Theme_Light_NoTitleBar); 
    } 
    AlertDialog.Builder builder = new AlertDialog.Builder(theme); 

Hope this Hilfe.

+0

meine minSdkVersion ist 19, meine targetSdkVersion ist 23 und meine compileSdkVersion ist 23 – Phil

+0

Vielleicht gibt es ein Problem beim Aufruf verschiedener Stile, ich kann mir jetzt keine andere Lösung vorstellen, sorry. –

0

Stellt sich heraus, ich folgendes auf die Erklärung in meinem Manifest für meine Anmeldung Aktivität

android:theme="@style/Theme.AppCompat.NoActionBar"