601 Stimmen

So ändern Sie die Farbe des Fortschrittsbalkens in Android

Ich verwende einen horizontalen Fortschrittsbalken in meiner Android-Anwendung, und ich möchte die Fortschrittsfarbe ändern (die standardmäßig gelb ist). Wie kann ich das tun mit code (nicht XML)?

0 Stimmen

Haben Sie versucht, MyProgressBar.setProgressDrawable(Drawable d), die eine Bitmap mit der gewünschten Farbe angibt? developer.Android.com/reference/Android/widget/ developer.Android.com/reference/Android/graphics/drawable/

2 Stimmen

Ja, ich habe es versucht, aber es funktioniert nicht. Es setzt die Hintergrundfarbe der gesamten Fortschrittsbalken-Ansicht, anstatt die Hintergrundfarbe nur des Balkens selbst zu setzen. Danke!

76 Stimmen

android:indeterminateTint="@android:color/white" funktioniert nur bei API >=21

69voto

Rasoul Miri Punkte 7020

Alle API

Wenn Sie alle API verwenden, erstellen Sie einfach das Thema im Stil

style.xml

<resources>

    //...

    <style name="progressBarBlue" parent="@style/Theme.AppCompat">
        <item name="colorAccent">@color/blue</item>
    </style>

</resources>

und Verwendung in Arbeit

<ProgressBar
    ...
    android:theme="@style/progressBarBlue" />

API-Stufe 21 und höher

bei Verwendung in API-Stufe 21 und höher einfach diesen Code verwenden:

<ProgressBar
   //...
   android:indeterminate="true"
   android:indeterminateTintMode="src_atop"
   android:indeterminateTint="@color/secondary"/>

1 Stimmen

Schön, ich denke, style.xml Methode ist am besten.(keine Notwendigkeit über 20 api)

53voto

Devinder Jhinjer Punkte 599

Das funktioniert bei mir. Es funktioniert auch für niedrigere Versionen. Fügen Sie dies zu Ihrer syles.xml hinzu

<style name="ProgressBarTheme" parent="ThemeOverlay.AppCompat.Light">
<item name="colorAccent">@color/colorPrimary</item>
</style>

Und verwenden Sie es wie folgt in xml

<ProgressBar
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:theme="@style/ProgressBarTheme"
   />

1 Stimmen

Ich habe dies in der KryptoTweets Beispiel-App. Ich habe festgestellt, dass das übergeordnete Thema nicht erforderlich ist, damit diese Lösung wie erwartet funktioniert. parent="ThemeOverlay.AppCompat.Light"

0 Stimmen

Die einfachste Lösung, wenn Sie die Standard-Fortschrittsleiste einfärben möchten. Danke

0 Stimmen

@Saul_programa Freut mich zu wissen, dass es Ihnen hilft

42voto

MOH3N Punkte 845

Das hat bei mir funktioniert:

<ProgressBar
 android:indeterminateTint="#d60909"
 ... />

14 Stimmen

Nur in API-Stufe 21 und höher verwendet

35voto

PaulieG Punkte 341

Wie einige der Vorschläge, können Sie eine Form und clipdrawable mit einer Farbe angeben, dann setzen Sie es. Ich habe diese Arbeit programmatisch. Dies ist, wie ich es tun..

Stellen Sie zunächst sicher, dass Sie die Zeichnungsbibliothek importieren

import android.graphics.drawable.*;

Dann verwenden Sie den Code ähnlich wie unten;

ProgressBar pg = (ProgressBar)row.findViewById(R.id.progress);
final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null,null));
String MyColor = "#FF00FF";
pgDrawable.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
pg.setProgressDrawable(progress);   
pg.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
pg.setProgress(45);

1 Stimmen

Ich habe den obigen Code ausprobiert, leider ergibt er nur einen "leeren" Fortschrittsbalken. Übersehe ich etwas?

0 Stimmen

Sie müssen setLevel auf dem ClipDrawable aufrufen. Es nimmt einen Wert von 0 bis 10000 an. Also, progress.setLevel(2500) würde 25% voll sein.

1 Stimmen

Ich habe eine Bearbeitung der Antwort eingereicht, die einen Grund für einen "leeren" Fortschrittsbalken erklärt - und 2 Möglichkeiten, dies zu beheben (einschließlich der Lösung von @HappyEngineer)

31voto

the.knife Punkte 409

Wenn unbestimmt:

((ProgressBar)findViewById(R.id.progressBar))
    .getIndeterminateDrawable()
    .setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);

0 Stimmen

Ich habe dies verwendet, aber es animiert nicht, nur Farbe wurde angewendet... Ich verwende einen kreisförmigen Fortschrittsbalken

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X