进度对话框在 Pre-lollipop 设备上奇怪地出现
Progress Dialog appears weirdly on Pre-lollipop devices
我在前棒棒糖设备上的进度对话框如下所示:
看到那双 window 了吗?我不知道为什么会这样。
代码
像这样初始化进度对话框:
progressDialog = new ProgressDialog(context);
progressDialog.setMessage(messsage);
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(false);
在值和中定义了这样的样式 values-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>
- 在 google 上进行了一些搜索后,我在我的主题中添加了这样的警报样式:
<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 及更高版本 上效果很好,但在 pre-lollipop 上看起来就像图像中一样。任何人都可以在这里帮忙并告诉我我做错了什么吗?
不要设置那些对话的样式,如果您想在棒棒糖之前的设备中使用 material 样式,请使用库
非常容易使用。
我的解决方法是为 pre-Lollipop 创建一个单独的主题和样式,参数 android:windowBackground
为透明。这删除了后面的第二个背景。
<style name="AppCompatAlertDialogStyleNoWindow" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowBackground">@color/transparent</item>
</style>
然后将此样式添加为 android:alertDialogTheme
pre-Lollipop 主题。
我回复的有点晚,但这就是我解决问题的方式。
我单独创建了一个v-14
styles.xml
并定义了一个样式如下图
values-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;
}
到目前为止效果很好!希望对大家有帮助。
您的答案不适用于 pre-Lollipop(在 API 19 上测试)。但我找到了解决方案:您需要使用 android.support.v7.app.AlertDialog
(在导入设置中)
我在前棒棒糖设备上的进度对话框如下所示:
看到那双 window 了吗?我不知道为什么会这样。
代码
像这样初始化进度对话框:
progressDialog = new ProgressDialog(context); progressDialog.setMessage(messsage); progressDialog.setIndeterminate(true); progressDialog.setCancelable(false);
在值和中定义了这样的样式 values-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>
- 在 google 上进行了一些搜索后,我在我的主题中添加了这样的警报样式:
<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 及更高版本 上效果很好,但在 pre-lollipop 上看起来就像图像中一样。任何人都可以在这里帮忙并告诉我我做错了什么吗?
不要设置那些对话的样式,如果您想在棒棒糖之前的设备中使用 material 样式,请使用库
非常容易使用。
我的解决方法是为 pre-Lollipop 创建一个单独的主题和样式,参数 android:windowBackground
为透明。这删除了后面的第二个背景。
<style name="AppCompatAlertDialogStyleNoWindow" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowBackground">@color/transparent</item>
</style>
然后将此样式添加为 android:alertDialogTheme
pre-Lollipop 主题。
我回复的有点晚,但这就是我解决问题的方式。
我单独创建了一个v-14
styles.xml
并定义了一个样式如下图
values-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;
}
到目前为止效果很好!希望对大家有帮助。
您的答案不适用于 pre-Lollipop(在 API 19 上测试)。但我找到了解决方案:您需要使用 android.support.v7.app.AlertDialog
(在导入设置中)