在棒棒糖前设备上,进度对话显得非常奇怪

时间:2015-12-18 14:34:27

标签: android progressdialog android-styles

我在棒棒糖前设备上的进度对话框如下所示: enter image description here

看到那个双窗口?我不知道为什么会发生这种情况。

代码

  1. 像这样初始化进度对话框:

    progressDialog = new ProgressDialog(context);
    progressDialog.setMessage(messsage);
    progressDialog.setIndeterminate(true);
    progressDialog.setCancelable(false);
    
  2. 在值值-21中定义了这样的样式:

  3. <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. 在google上搜索一下后,我在主题中添加了警报样式,如下所示:
    2. <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>

      主要主题来自Theme.AppCompat.Light.NoActionBar

      这在 Lollipop及以上上效果很好,但在棒棒糖前的图片中看起来很像。任何人都可以帮忙,告诉我我做错了什么?

4 个答案:

答案 0 :(得分:4)

我迟到了,但这就是我解决问题的方法 我创建了一个单独的v-14 styles.xml并定义了一个样式,如下所示

<强>值-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 - textAppearance和windowTitleStyle是我为自定义字体创建的样式。

使用的常规(values / styles.xml)警告对话框样式为:

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

最后显示进度对话框:

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

}

到目前为止,效果很好!希望它对某人有所帮助。

答案 1 :(得分:3)

我的解决方法是为前Lollipop创建一个单独的主题和样式,参数android:windowBackground为透明。这删除了后面的第二个背景。

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

然后将此样式添加为前Lollipop主题的android:alertDialogTheme

答案 2 :(得分:2)

您的答案不适用于前Lollipop(在API 19上测试)。但我找到了解决方案:您需要使用android.support.v7.app.AlertDialog(在导入设置中)

答案 3 :(得分:0)

如果你想在pre lolipop设备中使用材质样式,那么不要设置那些对话框的样式,然后使用库

Example

它非常易于使用。