Ich verwende in meiner Android-Anwendung einen horizontalen Fortschrittsbalken und möchte dessen Fortschrittsfarbe ändern (standardmäßig gelb). Wie kann ich das mit code
(nicht XML) machen?
android
android-progressbar
WhiteTigerK
quelle
quelle
android:indeterminateTint="@android:color/white"
funktioniert nur auf API> = 21Antworten:
Es tut mir leid, dass dies nicht die Antwort ist, aber was treibt die Anforderung an, sie aus dem Code festzulegen? Und
.setProgressDrawable
sollte funktionieren, wenn es richtig definiert istquelle
Für eine horizontale ProgressBar können Sie auch Folgendes verwenden
ColorFilter
:Hinweis: Dadurch wird das Erscheinungsbild aller Fortschrittsbalken in Ihrer App geändert. Gehen Sie folgendermaßen vor, um nur einen bestimmten Fortschrittsbalken zu ändern:
Wenn progressBar unbestimmt ist, verwenden Sie
getIndeterminateDrawable()
anstelle vongetProgressDrawable()
.Seit Lollipop (API 21) können Sie eine Fortschrittsfarbe festlegen:
quelle
getIndeterminateDrawable
wenn Sie unbestimmten Fortschritt verwenden.Dies ist nicht programmatisch, aber ich denke, es könnte trotzdem vielen Menschen helfen.
Ich habe viel versucht und der effizienteste Weg war, diese Zeilen zu meiner ProgressBar in der XML-Datei hinzuzufügen:
Am Ende hat dieser Code es für mich getan:
Diese Lösung funktioniert für API 21+
quelle
Für meinen unbestimmten Fortschrittsbalken (Spinner) habe ich einfach einen Farbfilter für das Zeichenelement festgelegt. Funktioniert super und nur eine Zeile.
Beispiel, bei dem die Farbe auf Rot gesetzt wird:
quelle
android.graphics.PorterDuff.Mode.MULTIPLY
zuPorterDuff.Mode.SRC_IN
und Sie erhalten die genaue Hex-Farbe.Dies ist eine alte Frage, aber die Verwendung eines Themas wird hier nicht erwähnt. Wenn Ihr Standardthema verwendet wird,
AppCompat
ist IhreProgressBar
FarbecolorAccent
Sie definiert haben.Durch Ändern
colorAccent
wird auch dieProgressBar
Farbe Ihres Körpers geändert , aber Änderungen werden auch an mehreren Stellen angezeigt. Also, wenn Sie eine andere Farbe nur für eine bestimmte wollenPregressBar
, können Sie dies tun, indem Sie ein Thema darauf anwendenProgressBar
:Erweitern Sie Ihr Standarddesign und überschreiben Sie es
colorAccent
Und dazu
ProgressBar
noch dasandroid:theme
Attribut :Es wird also ungefähr so aussehen:
Sie ändern also nur a
colorAccent
für Ihre spezielleProgressBar
.Hinweis : Die Verwendung
style
funktioniert nicht. Sie müssenandroid:theme
nur verwenden. Weitere Informationen zum Thema finden Sie hier: https://plus.google.com/u/0/+AndroidDevelopers/posts/JXHKyhsWHAHquelle
Alle API
Wenn Sie alle APIs verwenden, erstellen Sie das Thema einfach mit Stil
style.xml
und in Bearbeitung verwenden
API Level 21 und höher
Wenn Sie in API Level 21 und höher verwendet werden, verwenden Sie einfach diesen Code:
quelle
Gemäß einigen Vorschlägen können Sie eine Form und einen Clip mit einer Farbe angeben und dann festlegen. Ich habe dies programmatisch arbeiten. So mache ich das ..
Stellen Sie zunächst sicher, dass Sie die Zeichenbibliothek importieren.
import android.graphics.drawable.*;
Verwenden Sie dann den folgenden Code.
quelle
progress.setLevel(2500)
funktioniert bei mir nicht und anscheinend wurde deine Bearbeitung aus irgendeinem Grund nicht akzeptiert. Vielen Dank. +1.Das hat bei mir funktioniert:
quelle
wenn unbestimmt:
quelle
Das funktioniert bei mir. Es funktioniert auch für niedrigere Versionen. Fügen Sie dies Ihrer syles.xml hinzu
Und benutze es so in xml
quelle
parent="ThemeOverlay.AppCompat.Light"
Heutzutage habe ich im Jahr 2016 festgestellt, dass einige Pre-Lollipop-Geräte diese
colorAccent
Einstellung nicht einhalten. Meine endgültige Lösung für alle APIs lautet nun wie folgt:Für Bonuspunkte wird kein veralteter Code verwendet. Versuch es!
quelle
wrapDrawable.mutate()
mitDrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
.xml
Einstellungen und auch, ob etwas anderes dieProgressBar
Farbe überschreibt .Das habe ich getan. Hat funktioniert.
Fortschrittsanzeige:
progressdrawable.xml:
Verwenden Sie hier den Farbverlauf, um die Farbe nach Ihren Wünschen zu ändern. Und android: toDegrees = "X" erhöht den Wert von X und der Fortschrittsbalken dreht sich schnell. Verringern Sie und es dreht sich langsam. Passen Sie an Ihre Bedürfnisse an.
Stichprobe:
quelle
Treffen Sie das gleiche Problem, während Sie daran arbeiten, das Erscheinungsbild des Standard-Fortschrittsbalkens zu ändern. Hier sind einige weitere Informationen, die hoffentlich den Menschen helfen werden :)
a-z0-9_.
(dh keine Großbuchstaben!)R.drawable.filename
myProgressBar.setProgressDrawable(...)
, müssen Sie sich jedoch nicht nur auf Ihr benutzerdefiniertes Layout beziehen, sondernR.drawable.filename
müssen es wie folgt abrufenDrawable
:quelle
Es gibt wahrscheinlich eine Sache, auf die in dieser Antwort nicht Bezug genommen wurde:
Wenn Ihr Thema von erbt
Theme.AppCompat
,ProgressBar
wird die Farbe angenommen, die Sie"colorAccent"
in Ihrem Thema definiert haben.Also mit ..
..wird die Farbe der ProgressBar automatisch auf die
@color/custom_color
.quelle
quelle
Sie können versuchen, Ihre Stile, Designs oder Android zu ändern: indeterminateTint = "@ color / yourColor", wo immer Sie möchten, aber es gibt nur eine Möglichkeit, die auf jeder Android SKD-Version funktioniert:
Wenn Ihr Fortschrittsbalken nicht unbestimmt ist, verwenden Sie bitte:
Wenn Ihr Fortschrittsbalken unbestimmt ist, verwenden Sie bitte:
Es ist traurig, dass Android so ein Durcheinander ist!
quelle
ProgressBar
, aber für bestimmt malt es ganze Skala mit Farbe.Wie ich es in der horizontalen ProgressBar gemacht habe:
quelle
Einfachste Lösung Wenn Sie die Farbe in der XML-Layoutdatei ändern möchten, verwenden Sie den folgenden Code und verwenden Sie die Eigenschaft indeterminateTint für die gewünschte Farbe.
quelle
Diese Lösung hat bei mir funktioniert:
quelle
Eine weitere Kleinigkeit: Die Themenlösung funktioniert, wenn Sie ein Basisthema erben. Für App Compact sollte Ihr Thema also wie folgt lauten:
Und setzen Sie dies dann im Thema Fortschrittsbalken
quelle
So ändern Sie die horizontale ProgressBar-Farbe (in Kotlin):
So ändern Sie die unbestimmte ProgressBar-Farbe:
Und schließlich färbt es normalerweise Pre-Lollipop ProgressBars
quelle
Benutzerdefinierter Materialstil des horizontalen Fortschrittsbalkens:
Zum Ändern der Hintergrundfarbe und des Fortschritts des horizontalen Fortschrittsbalkens.
Wenden Sie es auf den Fortschrittsbalken an, indem Sie das Stilattribut festlegen. Informationen zu benutzerdefinierten Materialstilen und benutzerdefinierten Fortschrittsbalken finden Sie unter http://www.zoftino.com/android-progressbar-and-custom-progressbar-examples
quelle
Gepostet , um Informationen über die Antwort von PaulieG hinzuzufügen , da ateiob mich gebeten hat, etwas zu erklären ...
Ich kann sagen, dass es (oder zumindest zum Zeitpunkt des Schreibens, als ich mir diese aktuelle Version des Android-Quellcodes ansah) einen Fehler / ein Problem / eine Optimierung im
ProgressBar
Code gibt, der den Versuch ignoriert, den Fortschritt auf einen Wert zu setzen ist schon bei.Nach dem Aufruf
ProgressBar.setProgressDrawable()
ist Ihr Fortschrittsbalken leer (weil Sie den zeichnbaren Teil geändert haben).Dies bedeutet, dass Sie den Fortschritt festlegen und neu zeichnen müssen. Wenn Sie den Fortschritt jedoch nur auf einen beibehaltenen Wert setzen, wird nichts unternommen.
Sie müssen es zuerst auf 0 und dann wieder auf den "alten" Wert setzen, und der Balken wird neu gezeichnet.
Um es zusammenzufassen:
Unten ist eine Methode, die ich habe, die dies tut:
Was die Lösung von HappyEngineer angeht, war es meiner Meinung nach eine ähnliche Problemumgehung, den Versatz "Fortschritt" manuell festzulegen. In beiden Fällen sollte der obige Code für Sie funktionieren.
quelle
Verwenden Sie den android.support.v4.graphics.drawable.DrawableCompat :
quelle
Verwenden Sie einfach:
quelle
Für eine horizontale ProgressBar verwende ich:
Ein Beispielaufruf wäre:
Wenn Sie den 'sekundären Fortschritt' nicht benötigen, setzen Sie einfach value2 auf value1.
quelle
Wenden Sie diesen benutzerdefinierten Stil auf den Fortschrittsbalken an.
@ drawable / progress.xml -
Verwenden Sie diesen Bildtyp für den Fortschrittsbalken.
Für ein besseres Ergebnis können Sie mehrere Fortschrittsbilder verwenden. Und bitte zögern Sie nicht, Bilder zu verwenden, da die Android-Plattform selbst Bilder für die Fortschrittsanzeige verwendet. Der Code wird aus sdk extrahiert :)
quelle
Gemäß Muhammad-Adil, vorgeschlagen für SDK Version 21 und höher
in XML funktioniert für mich, ist einfach genug.
quelle
Hier ist der Code zum programmgesteuerten Ändern der Farbe von ProgressBar.
quelle
quelle