Ich habe Horizontal eingestellt ProgressBar
.
Ich möchte die Fortschrittsfarbe in Gelb ändern.
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="80dip"
android:layout_height="20dip"
android:focusable="false"
style="?android:attr/progressBarStyleHorizontal" />
Das Problem ist, dass die Fortschrittsfarbe bei verschiedenen Geräten unterschiedlich ist. Ich möchte also, dass die Fortschrittsfarbe korrigiert wird.
android
android-progressbar
Nishant Shah
quelle
quelle
Antworten:
Ich habe dies von einer meiner Apps kopiert, daher gibt es wahrscheinlich ein paar zusätzliche Attribute, aber ich sollte Ihnen die Idee geben. Dies ist aus dem Layout mit dem Fortschrittsbalken:
Erstellen Sie dann eine neue Zeichnung mit einer ähnlichen Darstellung (in diesem Fall
greenprogress.xml
):Sie können die Farben nach Bedarf ändern. Dadurch erhalten Sie einen grünen Fortschrittsbalken.
quelle
android:id="@android:id/progress"
,android:id="@android:id/background"
undandroid:id="@android:id/secondaryProgress"
steht.Eine einfachere Lösung:
progess_drawable_blue
quelle
Erstellen Sie einfach einen Stil in
values/styles.xml
.Dann legen Sie diesen Stil als Ihr
ProgressBar
Thema fest.und egal, Ihr Fortschrittsbalken ist horizontal oder kreisförmig. Das ist alles.
quelle
Wenn Sie nur die Farbe des Fortschrittsbalkens ändern möchten, können Sie einfach einen Farbfilter in der onCreate () -Methode Ihrer Aktivität verwenden:
Idee von hier .
Sie müssen dies nur für Pre-Lollipop-Versionen tun. Auf Lollipop können Sie das styleAccent-Stilattribut verwenden.
quelle
SeekBar
Sie für API 16 einfach Folgendes hinzu :seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
. Dadurch wird die Farbe dieses runden Daumens geändert.setColorFilter()
auf einem ziehbar wird direkt die Farbe überall anwenden. Da dies das ist, was ich nicht brauchte, rief ich einfachmutate()
amDrawable
(dh wieseekBar.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
Für API Level 21 oder höher verwenden Sie einfach
quelle
Es gibt drei Möglichkeiten, um diese Frage zu lösen:
Insbesondere bei # 2 und # 3 herrscht große Verwirrung, wie aus den Kommentaren zu amfcostas Antwort hervorgeht. Diese Antwort führt zu unvorhersehbaren Farbergebnissen, wenn Sie den Fortschrittsbalken auf etwas anderes als Primärfarben setzen möchten, da nur die Hintergrundfarbe geändert wird und der tatsächliche "Clip" -Bereich des Fortschrittsbalkens weiterhin eine gelbe Überlagerung mit reduzierter Deckkraft ist. Wenn Sie beispielsweise diese Methode verwenden, um den Hintergrund auf dunkelviolett einzustellen, wird eine Fortschrittsbalken-Clip-Farbe mit einer verrückten rosa Farbe angezeigt, die sich aus der Vermischung von dunkelviolett und gelb über reduziertes Alpha ergibt.
Wie auch immer, # 1 wird perfekt von Ryan beantwortet und Štarke beantwortet die meisten von # 3, aber für diejenigen, die nach einer vollständigen Lösung für # 2 und # 3 suchen:
So passen Sie die Farbe des Fortschrittsbalkens programmgesteuert an, wählen jedoch die Farbe aus einer in XML deklarierten vorgegebenen Farbe aus
res / drawable / my_progressbar.xml :
Erstellen Sie diese Datei, aber ändern Sie die Farben in my_progress und my_secondsProgress:
(HINWEIS: Dies ist nur eine Kopie der eigentlichen XML-Datei, die die standardmäßige Android SDK ProgressBar definiert, aber ich habe die IDs und Farben geändert. Das Original heißt progress_horizontal.)
In Ihrem Java :
So passen Sie die Farbe des Fortschrittsbalkens programmgesteuert an und erstellen die Farbe programmgesteuert
EDIT: Ich habe die Zeit gefunden, dies richtig zu lösen. Meine frühere Antwort ließ dies etwas mehrdeutig.
Eine ProgressBar besteht aus 3 Drawables in einem LayerDrawable.
Im folgenden Beispiel werde ich die Farbe des Hauptfortschrittsbalkens in Cyan ändern.
In diesem Beispiel wurde eine Volltonfarbe festgelegt. Sie können durch Ersetzen eine Verlaufsfarbe festlegen
mit
Prost.
-Lanze
quelle
ViewUtils
mit einem Verweis auf konstruiereContext
, so dass ichContext
beim Aufruf vonconvertDpToPixel()
Wenn Sie sich in API-Level 21 oder höher befinden, können Sie die folgenden XML-Attribute verwenden:
quelle
Die einfachste Lösung, die ich herausgefunden habe, ist ungefähr so:
Legen Sie die oben genannten in
styles.xml
Datei unterres > values
Ordner.HINWEIS: Wenn Sie eine andere Akzentfarbe verwenden, sollten die vorherigen Lösungen gut geeignet sein.
API 21 oder höher
quelle
quelle
Für alle, die programmatisch vorgehen möchten:
Das Festlegen von IDs für Drawables ist von entscheidender Bedeutung und sorgt dafür, dass die Grenzen und der aktuelle Status des Fortschrittsbalken erhalten bleiben
quelle
Ihr macht mir wirklich Kopfschmerzen. Was Sie tun können, ist , Ihre Ebenenliste zuerst über XML zeichnbar zu machen (dh einen Hintergrund als erste Ebene, eine Zeichnung, die den sekundären Fortschritt als zweite Ebene darstellt, und eine andere Zeichnung, die den primären Fortschritt als letzte Ebene darstellt) und dann zu ändern Geben Sie die Farbe auf dem Code wie folgt ein:
Diese Methode bietet Ihnen die beste Flexibilität, wenn Sie die Messung Ihres ursprünglichen Zeichnungsobjekts auf der XML deklarieren möchten, ohne Änderungen an der Struktur im Nachhinein vorzunehmen, insbesondere wenn Sie den spezifischen Ordner für den XML-Dateibildschirm benötigen und dann NUR DIE FARBE über die XML-Datei ändern müssen Code. Kein erneutes Instanziieren eines neuen ShapeDrawable von Grund auf neu.
quelle
Die ProgressBar-Farbe kann wie folgt geändert werden:
/res/values/colors.xml
/res/values/styles.xml
onCreate:
quelle
Erstellen Sie eine zeichnbare Ressource, deren Hintergrund Sie benötigen. In meinem Fall habe ich sie bg_custom_progressbar.xml genannt
Dann verwenden Sie diesen benutzerdefinierten Hintergrund wie
Es funktioniert gut für mich
quelle
In XML:
ViewModel:
quelle
Mit der Materialkomponentenbibliothek können Sie das
ProgressIndicator
mit demapp:indicatorColor
Attribut with verwenden , um die Farbe zu ändern:Hinweis : Es ist mindestens die Version erforderlich
1.3.0-alpha01
.Mit dem können
ProgressBar
Sie die Farbe überschreiben mit:mit:
quelle
Wenn Sie die primäre und sekundäre Fortschrittsfarbe programmgesteuert in Android auf den horizontalen Fortschrittsbalken setzen möchten, verwenden Sie das folgende Snippet
quelle