2015-12-18 5 views
7

Mein Fortschritt Dialog auf Pre-Lutscher-Geräte wie dies erscheint: enter image description hereFortschritt Dialog erscheint weirdly auf Pre-Lutscher Geräte

Sehen Sie, dass Doppelfenster? Ich habe keine Ahnung, warum dies geschieht.

-Code

  1. Initialisieren des Fortschritts wie dieser Dialog:

    progressDialog = new ProgressDialog(context); 
    progressDialog.setMessage(messsage); 
    progressDialog.setIndeterminate(true); 
    progressDialog.setCancelable(false); 
    
  2. definiert einen Stil wie diese in Werte und Werte-21:

<style name="AlertDialog.Theme" parent="Theme.AppCompat.Light.Dialog"> 
 
     <item name="android:textColorPrimary">@color/black</item> 
 
     <item name="android:background">@color/white</item> 
 
     <item name="android:textColor">@color/black</item> 
 
     <item name="colorAccent">@color/orange</item> 
 
     <item name="colorPrimary">@color/orange</item> 
 
     <item name="colorPrimaryDark">@color/darkerorance</item> 
 
    </style>

  1. Nach einiger Suche auf Google, ich die Warnung Stil in meinem Hauptthema wie folgt hinzugefügt:

<item name="android:dialogTheme">@style/AlertDialog.Theme</item> 
 
     <item name="dialogTheme">@style/AlertDialog.Theme</item> 
 
     <item name="android:alertDialogTheme">@style/AlertDialog.Theme</item> 
 
     <item name="alertDialogTheme">@style/AlertDialog.Theme</item>

Und das Hauptthema erstreckt sich von Theme.AppCompat.Light.NoActionBar.

Dies funktioniert gut auf Lollipop und über, aber erscheint wie auf dem Bild auf Pre-Lollipop. Kann mir jemand hier helfen und mir sagen, was mache ich falsch?

+0

Ich glaube nicht, dass es eine Support-Version von ProgressDialog gibt. – Uday

+0

Sie sind sich Ihres bestimmten Anwendungsfalls nicht sicher, aber als allgemeine UI-Überlegung sollten Sie einen ViewFlipper mit einer Ladeansicht (z. B. FrameLayout mit ProgressDialog) anstelle eines ProgressDialogs verwenden. ProgressDialogs blockieren ... Wenn der Ladezustand unterbrochen wird oder eine Weile dauert, kann der Benutzer keine anderen Aktionen ausführen. – jch000

Antwort

3

Ich bin ein bisschen spät zu antworten, aber so habe ich es gelöst.
habe ich einen separaten v-14styles.xml und einen Stil definiert, wie unten

Werte-v14/styles.xml

<style name="AlertDialog.Holo" parent="@android:style/Theme.Holo.Light.Dialog"> 
    <item name="android:textColorPrimary">@color/black</item> 
    <item name="android:textColor">@color/black</item> 
    <item name="android:textAppearance">@style/Helvetica.Regular</item> 
    <item name="android:windowTitleStyle">@style/DialogTitleStyle</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 

P. S gezeigt - textAppearance und windowTitleStyle sind Arten I für die benutzerdefinierte Schriftarten geschaffen hatte.

Die regulären (Werte/Stile.xml) Alarm verwendet Dialogstil ist:

<style name="AlertDialog.Theme" parent="Theme.AppCompat.Light.Dialog"> 
    <item name="android:textColorPrimary">@color/black</item> 
    <item name="android:textColor">@color/black</item> 
    <item name="colorAccent">@color/zifycolor</item> 
    <item name="colorPrimary">@color/zifycolor</item> 
    <item name="colorPrimaryDark">@color/zifycolorDarker</item> 
    <item name="android:windowTitleStyle">@style/DialogTitleStyle</item> 
    <item name="buttonBarButtonStyle">@style/AlertDialogButtonStyle</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

schließlich einen Fortschrittsdialog zu zeigen:

/** 
* Create a progress dialog. The appropriate theme gets applied. 
* 
* @param context valid context with a window 
* @param messsage message to show 
* @return {@code ProgressDialog} instance 
*/ 
public static ProgressDialog createProgressDialog(@NonNull final Context context, @NonNull String messsage) { 
    ProgressDialog progressDialog; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
     progressDialog = new ProgressDialog(context, R.style.AlertDialog_Theme); 
    else 
     progressDialog = new ProgressDialog(context, R.style.AlertDialog_Holo); 

    progressDialog.setMessage(messsage); 
    progressDialog.setCancelable(false); 
    return progressDialog; 

} 

Bisher es funktioniert super! Hoffe es hilft jemandem.

0

Dont Stil diese Dialoge, wenn u Material Stile in pre-Lolipop-Geräte verwenden möchten, dann Verwendung von Bibliotheken machen

Example

Es ist sehr einfach zu bedienen.

+0

können wir dies erreichen, ohne diese Bibliothek zu benutzen? – Vishnu

+0

Bibliothek erwähnt ist Open-Source, Sie können natürlich den Code überprüfen und versuchen, Ihre eigenen zu implementieren. Bibliotheken sollen Ihre Zeit sparen. Zum Lernen können Sie den Code überprüfen – Veer3383

3

Mein Workaround war das Erstellen eines separaten Designs und Stil für Pre-Lollipop mit dem Parameter android:windowBackground als transparent. Dies entfernte den 2. Hintergrund auf der Rückseite.

<style name="AppCompatAlertDialogStyleNoWindow" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="android:windowBackground">@color/transparent</item> 
</style> 

Dann fügen Sie diesen Stil als android:alertDialogTheme für Pre-Lollipop-Thema.

+0

Nur diese API 16 und höher getestet – ono

0

Ihre Antwort funktioniert nicht für Pre-Lollipop (getestet auf API 19). Aber ich finde Lösung: Sie müssen android.support.v7.app.AlertDialog verwenden (in den Importeinstellungen)

Verwandte Themen