2015-12-18 13 views
7

öncesi lolipop cihazlarda Benim ilerleme iletişim gibi görünür: enter image description hereİlerleme Dialog Öncesi lolipop cihazlarda esrarlı görünen

çift pencereye Görüyor? Bunun neden böyle olduğuna dair hiçbir fikrim yok.

Kod

  1. böyle iletişim ilerleme başlatılıyor:

    progressDialog = new ProgressDialog(context); 
    progressDialog.setMessage(messsage); 
    progressDialog.setIndeterminate(true); 
    progressDialog.setCancelable(false); 
    
  2. değerler böyle bir stil Tanımlı ve değerleri-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>

  • Bazı google arama sonra böyle benim ana tema uyarı stili eklendi
      :

    <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>

    Ve ana tema, Theme.AppCompat.Light.NoActionBar'dan genişler.

    Bu, Lollipop ve üzerinde harika çalışır, ancak lolipop öncesi görüntüde olduğu gibi görünür. Burada herkes yardımcı olabilir ve neyi yanlış yapıyorum söyle? u öncesi lolipop cihazlarda malzeme stillerini kullanmak istiyorsanız

  • +0

    ProgressDialog'un bir destek sürümü olduğunu sanmıyorum. – Uday

    +0

    Belirli kullanım durumunuzdan emin değilsiniz, ancak genel kullanıcı arayüzü olarak, ProgressDialog yerine bir yükleme görünümü (örn., FrameLayout with ProgressDialog) içeren bir ViewFlipper kullanmayı düşünebilirsiniz. ProgressDialogs engelliyor ... bu yüzden yükleme durumunuz askıya alınırsa veya bir süre alırsa, kullanıcının başka eylemler yapması engellenir. – jch000

    cevap

    3

    Biraz geç cevap vericiyim ama bunu çözmek için uğraştım.
    Ben ayrı v-14styles.xml oluşturulan ve

    değerler-V14/styles.xml altına

    <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. gösterildiği gibi bir stil tanımlanır - textAppearance ve windowTitleStyle ben özel yazı tipleri için yarattığı stilleri vardır. Düzenli (değerler/stiller)

    xml) kullanılan uyarı iletişim tarzıdır:

    <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> 
    

    Nihayet bir ilerleme iletişim göstermek için:

    /** 
    * 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; 
    
    } 
    

    Şimdiye kadar o inşaat büyük! Umarım birilerine yardım eder.

    0

    Dont tarzı bu diyaloglar, daha sonra kütüphaneler

    Example

    Its kullanımı çok kolay

    faydalanmak.

    +0

    Bu kütüphaneyi kullanmadan bunu başarabilir miyiz? – Vishnu

    +0

    Belirtilen kütüphane açık kaynak kodlu olup olmadığını açıkça kontrol edebilir ve kendinizinkini uygulamaya çalışabilir. Kütüphaneler zamanınızı kurtarmaya yöneliktir. Öğrenme için kodu kontrol edebilirsiniz – Veer3383

    3

    Çözümüm, Lollipop öncesi için android:windowBackground parametresiyle birlikte şeffaf olarak ayrı bir tema ve stil oluşturmaktı. Bu arkadaki 2. arka planı kaldırdı.

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

    Sonra öncesi Lollipop tema için android:alertDialogTheme olarak bu stili ekleyin.

    +0

    Sadece bu API 16 ve üstü test – ono

    0

    Cevabınız Lollipop öncesi için çalışmıyor (API 19'da test edilmiştir). Ama ben çözüm buluyorum: android.support.v7.app.AlertDialog (içe aktarma ayarlarında) kullanmanız gerekiyor