J'utilise ProgressDialog
pour afficher la barre de progression
ProgressDialog progressDialog = new ProgressDialog(context);
progressDialog.setCancelable(false);
progressDialog.setMessage(message);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
Et ça vient comme ça
Je veux changer la couleur verte du cercle en rouge. y a-t-il un moyen?
J'ai essayé
.getIndeterminateDrawable().setColorFilter(0xFFFFFFFF, Android.graphics.PorterDuff.Mode.MULTIPLY);
Mais ne travaille pas.
Dans style.xml, créez un style pour la boîte de dialogue:
<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>
Dans ce "Android:textColorPrimary"
, vous devez définir la couleur que vous souhaitez afficher et, dans le code Java, définir le style de ProgressDialog
comme:
ProgressDialog progressDialog = new ProgressDialog(context,R.style.AppCompatAlertDialogStyle);
Créez une présentation pour la boîte de dialogue de progression nommée custom_progress_dialog.xml dans le dossier de présentation.
<?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>
assurez-vous que indeterminate = true
et Android:indeterminateDrawable="@drawable/custom_progress_background"
Dans la structure d'activité où vous souhaitez utiliser le chargeur
<?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>
Ce n'est pas une solution parfaite, mais peut aider.
Vérifiez également mon commentaire précédent . https://stackoverflow.com/a/39687893/2598453
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();
Ajouter Style.xml
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/colorPrimary</item>
</style>
définir le style pour faire progresser le dialogue
pdialog = new ProgressDialog(context, R.style.MyAlertDialogStyle);
Essaye ça:
Exemple où définir la couleur en rouge:
ProgressBar spinner = new Android.widget.ProgressBar(
context,
null,
Android.R.attr.progressBarStyle);
spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, Android.graphics.PorterDuff.Mode.MULTIPLY);
Dans votre Thème d'application , changez 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>
utilisez la couleur que vous voulez
Obtenez la ressource de la ressource Android utilisée par ProgressDialog.
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);
La solution simple et parfaite pour une barre de progression des couleurs personnalisée .
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);
}
}
et l'utiliser dans votre mise en page.
<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>
Si vous souhaitez définir la couleur ad-hoc, sans avoir besoin d'héritage ni de XML dédié, vous pouvez utiliser quelque chose comme ceci:
/** 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());
}
Si vous utilisez déjà une bibliothèque de dialogues de matériaux ( https://github.com/afollestad/material-dialogs#indeterminate-progress-dialogs ), la solution la plus simple pourrait être d'utiliser le dialogue de progression de cette bibliothèque. Le cercle sera automatiquement coloré avec la couleur primaire:
MaterialDialog dialog = new MaterialDialog.Builder(context)
.content(R.string.loading)
.progress(true, 0)
.show();