更改ProgressDialog颜色(较低的API)Android

时间:2017-07-20 08:56:19

标签: android api colors customization progressdialog

你好在我的应用程序中我有简单的progressDialog。我使用一些简单的代码来管理它的颜色,但api低于21的问题。

通常看起来应该是

enter image description here

但对于较低的api,它看起来

enter image description here

有一种方法可以让它看起来像第一张图片吗?

我的progressDialog代码

 @Override
    public Dialog onCreateDialog(int dialogId) {
switch (dialogId) {
            case PLEASE_WAIT_DIALOG:
                final ProgressDialog dialog = new ProgressDialog(this,R.style.AppCompatAlertDialogStyle);
                dialog.setTitle(getResources().getString(R.string.dialogWysylka));
                dialog.setMessage(getResources().getString(R.string.dialogWysylkaDol));
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setCancelable(false);
                return dialog;
    }

和xml用于管理颜色:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/white</item>
    <item name="android:textColorPrimary">@color/white</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:background">@color/brownmuseum</item>
</style>

2 个答案:

答案 0 :(得分:0)

使用Android O,ProgressDialog现已正式弃用。建议采用另一种方法

  

此类在API级别O中已弃用。在活动内部使用ProgressBar内联等进度指示器,而不是使用此模式对话框。

您可以使用

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

</style>   

以下API

答案 1 :(得分:0)

尝试使用此代码获取IndeterminateDrawable和setColorFilter。

final ProgressDialog progress = new ProgressDialog(this);
progress.setMessage(getString(R.string.progress_message));
progress.setIndeterminate(true);
progress.setCancelable(false);
//if lower API 21
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    Drawable drawable = new ProgressBar(this).getIndeterminateDrawable().mutate();
    drawable.setColorFilter(ContextCompat.getColor(this, R.color.white),
            PorterDuff.Mode.SRC_IN);
    progress.setIndeterminateDrawable(drawable);
}

progress.show();