web-dev-qa-db-ja.com

androidでProgressDialogのデフォルトの円の色を変更する方法

プログレスバーを表示するためにProgressDialogを使用しています

            ProgressDialog progressDialog = new ProgressDialog(context);
            progressDialog.setCancelable(false);
            progressDialog.setMessage(message);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressDialog.show();

そして、このように来ています

enter image description here

円の緑色を赤に変更したい。方法はありますか?

私は試した

.getIndeterminateDrawable().setColorFilter(0xFFFFFFFF, Android.graphics.PorterDuff.Mode.MULTIPLY);

しかし、動作していません。

33
dev

Style.xmlで、ダイアログボックスのスタイルを作成します。

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/black</item>
<item name="Android:textColorPrimary">@color/white</item>
<item name="Android:background">@color/grey_dialog_box</item>
</style>

この"Android:textColorPrimary"表示したい色を定義する必要があり、JavaコードはProgressDialogのスタイルを定義します。

ProgressDialog progressDialog = new ProgressDialog(context,R.style.AppCompatAlertDialogStyle);

詳細: http://androidprogressdialogcustomcolor.blogspot.in/

42
Kapil Rajput

Style.xmlを追加

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorPrimary</item>
</style>

進行状況ダイアログにスタイルを設定

pdialog = new ProgressDialog(context, R.style.MyAlertDialogStyle);
13

enter image description here

Drawableフォルダーにcustom_progress_dialog.xmlという名前の進行ダイアログのレイアウトを作成します。

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:pivotX="50%" Android:pivotY="50%" Android:fromDegrees="0"
    Android:toDegrees="360">
    <shape Android:shape="ring" Android:innerRadiusRatio="3"
        Android:thicknessRatio="8" Android:useLevel="false">

        <size Android:width="56dip" Android:height="56dip" />

        <gradient Android:type="sweep" Android:useLevel="false"
            Android:startColor="@Android:color/transparent"
            Android:endColor="#1e9dff"
            Android:angle="0"
             />

    </shape>
</rotate>

indeterminate = trueおよびAndroid:indeterminateDrawable="@drawable/custom_progress_background"ローダーを使用するアクティビティレイアウト内

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/loadingPanel"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center">

    <ProgressBar
        Android:layout_width="wrap_content"
        style="?android:attr/progressBarStyleLarge"
        Android:layout_height="wrap_content"
        Android:indeterminateDrawable="@drawable/custom_progress_dialog"
        Android:indeterminate="true" />
</RelativeLayout>
10
Umesh Sonawane

これは完全な解決策ではありませんが、役立つ場合があります。

以前のコメントも確認してください。 https://stackoverflow.com/a/39687893/259845

final ProgressDialog progress = new ProgressDialog(this);
progress.setMessage(getString(R.string.progress_message));
progress.setIndeterminate(true);
progress.setCancelable(false);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop) {
    Drawable drawable = new ProgressBar(this).getIndeterminateDrawable().mutate();
    drawable.setColorFilter(ContextCompat.getColor(this, R.color.colorAccent),
            PorterDuff.Mode.SRC_IN);
    progress.setIndeterminateDrawable(drawable);
}

progress.show();
7
Milan Hlinák

これを試して:

色を赤に設定する例:

ProgressBar spinner = new Android.widget.ProgressBar(
                context,
                null,
                Android.R.attr.progressBarStyle);

spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, Android.graphics.PorterDuff.Mode.MULTIPLY);
4
user5400869

ProgressDialogで使用されているAndroidリソースからリソースを取得します。

final ProgressDialog progress = new ProgressDialog(context);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
ProgressBar progressbar=(ProgressBar)progress.findViewById(Android.R.id.progress);
progressbar.getIndeterminateDrawable().setColorFilter(Color.parseColor("#C60000"), Android.graphics.PorterDuff.Mode.SRC_IN);
4
Amri

アプリケーションテーマで、colorAccentを変更します

<style name="AppTheme.Bash" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">Add your color here</item>
    <item name="Android:windowBackground">@color/gray</item>
</style>

好きな色を使用してください

3
Dhaval Parmar

カスタムカラープログレスバーのための完璧でシンプルなソリューション。 Custom Progress bar

public class CustomProgressBar extends ProgressBar{
    public CustomProgressBar(Context context) {
        super(context);
        this.setIndeterminate(true);
        this.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.app_blue), PorterDuff.Mode.MULTIPLY);
    }

    public CustomProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.app_blue), PorterDuff.Mode.MULTIPLY);
    }

    public CustomProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

レイアウトで使用します。

<RelativeLayout
        Android:id="@+id/loadingPanel"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:gravity="center"
        Android:visibility="gone">

        <com.mayproject.views.CustomProgressBar
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </RelativeLayout>
1
Umesh Sonawane

継承や専用のXMLを必要とせずに、アドホックカラーを定義する場合は、次のようなものを使用できます。

/** Styles a ProgressDialog to use a themed Spinner. */
public void setStyledProgressDialog(final Context pContext, final ProgressDialog pProgressDialog, final int pColorResourceId) {
    // Allocate a new ProgressBar.
    final ProgressBar lProgressBar = new Android.widget.ProgressBar(pContext, null, Android.R.attr.progressBarStyle);
    // Configure the IndeterminateDrawable.
    lProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(pContext, pColorResourceId), Android.graphics.PorterDuff.Mode.MULTIPLY);
    // Assign the ProgressBar to the ProgressDialog.
    pProgressDialog.setIndeterminateDrawable(lProgressBar.getIndeterminateDrawable());
}
0
Mapsy

既にマテリアルダイアログライブラリを使用している場合( https://github.com/afollestad/material-dialogs#indeterminate-progress-dialogs )最も簡単な解決策は、そのライブラリの進捗ダイアログを使用することです。円は自動的に原色で色付けされます:

MaterialDialog dialog = new MaterialDialog.Builder(context)
                    .content(R.string.loading)
                    .progress(true, 0)
                    .show();
0