Korzystam z poziomego paska postępu w mojej aplikacji na Androida i chcę zmienić jego kolor postępu (domyślnie żółty). Jak mogę to zrobić przy użyciu code
(nie XML)?
android
android-progressbar
WhiteTigerK
źródło
źródło
android:indeterminateTint="@android:color/white"
działa tylko na API> = 21Odpowiedzi:
Przykro mi, że to nie jest odpowiedź, ale co powoduje, że wymaganie jest ustawione na podstawie kodu? I
.setProgressDrawable
powinien działać, jeśli jest poprawnie zdefiniowanyźródło
W przypadku poziomego paska postępu możesz również użyć
ColorFilter
następującego:Uwaga: Zmienia to wygląd wszystkich pasków postępu w Twojej aplikacji. Aby zmodyfikować tylko jeden konkretny pasek postępu, wykonaj następujące czynności:
Jeśli progressBar jest nieokreślony, użyj
getIndeterminateDrawable()
zamiastgetProgressDrawable()
.Od wersji Lollipop (API 21) można ustawić odcień postępu:
źródło
getIndeterminateDrawable
jeśli używasz nieokreślonego postępu.Nie jest to programowo, ale myślę, że i tak mogłoby pomóc wielu ludziom.
Dużo próbowałem i najskuteczniejszym sposobem było dodanie tych wierszy do paska postępu w pliku .xml:
W końcu ten kod zrobił to dla mnie:
To rozwiązanie działa dla API 21+
źródło
Dla mojego nieokreślonego paska postępu (pokrętła) po prostu ustawiłem filtr kolorów na rysunku. Działa świetnie i tylko jedna linia.
Przykład, w którym ustawienie koloru na czerwony:
źródło
android.graphics.PorterDuff.Mode.MULTIPLY
na,PorterDuff.Mode.SRC_IN
a otrzymasz dokładny kolor heksadecymalny.To stare pytanie, ale użycie motywu nie jest tutaj wymienione. Jeśli używasz domyślnego motywu
AppCompat
,ProgressBar
kolor będzie takicolorAccent
, jak zdefiniowałeś.Zmiana
colorAccent
spowoduje również zmianęProgressBar
koloru twojego koloru, ale zmiany te odzwierciedlają się również w wielu miejscach. Jeśli więc chcesz inny kolor tylko dla określonego,PregressBar
możesz to zrobić, stosując do tego motywProgressBar
:Rozszerz domyślny motyw i zastąp
colorAccent
I
ProgressBar
dodajandroid:theme
atrybut:Będzie to wyglądać mniej więcej tak:
Więc po prostu zmieniasz
colorAccent
na swójProgressBar
.Uwaga : korzystanie
style
nie będzie działać. Musiszandroid:theme
tylko użyć . Więcej zastosowań motywu znajdziesz tutaj: https://plus.google.com/u/0/+AndroidDevelopers/posts/JXHKyhsWHAHźródło
Wszystkie API
jeśli używasz wszystkich API, po prostu stwórz stylowo styl
style.xml
i wykorzystanie w toku
Poziom API 21 i wyższy
jeśli jest używany na poziomie API 21 i wyższym, wystarczy użyć tego kodu:
źródło
zgodnie z niektórymi sugestiami, MOŻESZ określić kolor i rysować kolorem, a następnie ustawić go. Mam to programowo. Tak to robię ..
Najpierw upewnij się, że importujesz bibliotekę do rysowania.
import android.graphics.drawable.*;
Następnie użyj kodu podobnego do poniższego;
źródło
progress.setLevel(2500)
nie działa dla mnie i prawdopodobnie z jakiegoś powodu Twoja edycja nie została zaakceptowana. Dzięki. +1.To działało dla mnie:
źródło
jeśli nieokreślony:
źródło
To działa dla mnie. Działa również w niższej wersji. Dodaj to do swojego syles.xml
I użyj tego w ten sposób w XML
źródło
parent="ThemeOverlay.AppCompat.Light"
Obecnie w 2016 roku zauważyłem, że niektóre urządzenia sprzed wersji Lollipop nie honorują tego
colorAccent
ustawienia, więc moje ostateczne rozwiązanie dla wszystkich interfejsów API jest teraz następujące:W przypadku punktów bonusowych nie używa on przestarzałego kodu. Spróbuj!
źródło
wrapDrawable.mutate()
zDrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
.xml
ustawienia, a także, jeśli coś innego przesłaniaProgressBar
kolor.Oto co zrobiłem. Pracował
Pasek postępu:
progressdrawable.xml:
Tutaj użyj gradientu, aby zmienić kolor, jak chcesz. Android: toDegrees = "X" zwiększa wartość X, a pasek postępu szybko się obraca. Zmniejszaj i obraca się powoli. Dostosuj do swoich potrzeb.
próba:
źródło
Uderz ten sam problem podczas pracy nad modyfikacją wyglądu / działania domyślnego paska postępu. Oto kilka informacji, które, mam nadzieję, pomogą ludziom :)
a-z0-9_.
(tzn. Bez wielkich liter!)R.drawable.filename
myProgressBar.setProgressDrawable(...)
, jednak nie możesz po prostu odwoływać się do niestandardowego układu jakoR.drawable.filename
musisz go pobrać jakoDrawable
:źródło
Prawdopodobnie jest jedna rzecz, o której nie wspomniano w tej odpowiedzi:
Jeśli Twój motyw dziedziczy
Theme.AppCompat
,ProgressBar
przyjmie kolor zdefiniowany jako"colorAccent"
w motywie.Więc używając…
.. odbarwi automatycznie pasek ProgressBar do
@color/custom_color
.źródło
źródło
Możesz spróbować zmienić swoje style, motywy lub za pomocą Androida: indeterminateTint = "@ color / yourColor" gdziekolwiek chcesz, ale jest tylko jeden sposób, aby to zrobić w dowolnej wersji SKD na Androida:
Jeśli pasek postępu nie jest nieokreślony, użyj:
Jeśli pasek postępu jest nieokreślony, użyj:
To smutne, że Android to taki bałagan!
źródło
ProgressBar
, ale dla określenia maluje całą skalę kolorem.Jak to zrobiłem w poziomym pasku postępu:
źródło
Najprostsze rozwiązanie, jeśli chcesz zmienić kolor w pliku xml układu, użyj poniższego kodu i użyj właściwości indeterminateTint dla żądanego koloru.
źródło
To rozwiązanie działało dla mnie:
źródło
Jeszcze jedna drobna rzecz: rozwiązanie motywu działa, jeśli odziedziczysz motyw podstawowy, więc w przypadku aplikacji kompaktowej motyw powinien wyglądać następująco:
A następnie ustaw to w motywie paska postępu
źródło
Aby zmienić poziomy pasek ProgressBar (w kotlin):
Aby zmienić nieokreślony kolor paska postępu:
I w końcu zwykle zabarwia paski postępu przed Lollipopem
źródło
Styl niestandardowy poziomy pasek postępu:
Aby zmienić kolor tła i postęp poziomego paska postępu.
Zastosuj go do paska postępu, ustawiając atrybut stylu, dla niestandardowych stylów materiałów i niestandardowego paska postępu sprawdź http://www.zoftino.com/android-progressbar-and-custom-progressbar-examples
źródło
Wysłano, aby dodać informacje o odpowiedzi PaulieG, ponieważ ateiob poprosił mnie o wyjaśnienie czegoś ...
Mogę powiedzieć, że w momencie pisania, gdy patrzyłem na obecną wersję kodu źródłowego Androida, był (a przynajmniej był) błąd / problem / optymalizacja w
ProgressBar
kodzie, który ignoruje próbę ustawienia postępu na wartość jest już na.Po telefonowaniu
ProgressBar.setProgressDrawable()
pasek postępu będzie pusty (ponieważ zmieniłeś część do rysowania).Oznacza to, że musisz ustawić postęp i przerysować go. Ale jeśli ustawisz postęp na zachowaną wartość, nic to nie da.
Musisz najpierw ustawić na 0, a następnie ponownie na „starą” wartość, a pasek zostanie przerysowany.
Podsumowując:
Poniżej mam metodę, która to robi:
Jeśli chodzi o rozwiązanie HappyEngineer, myślę, że podobne obejście polegało na ręcznym ustawieniu przesunięcia „postępu”. W obu przypadkach powyższy kod powinien działać dla Ciebie.
źródło
Użyj android.support.v4.graphics.drawable.DrawableCompat :
źródło
po prostu użyj:
źródło
Do poziomego stylu ProgressBar używam:
Przykładem wywołania byłoby:
Jeśli nie potrzebujesz „wtórnego postępu”, po prostu ustaw wartość 2 na wartość 1.
źródło
Zastosuj ten niestandardowy styl do paska postępu.
@ drawable / progress.xml -
Użyj tego typu obrazu jako paska postępu.
Aby uzyskać lepszy wynik, możesz użyć wielu obrazów postępu. I nie wahaj się przy użyciu obrazów, ponieważ sama platforma Android używa obrazów na pasku postępu. Kod jest pobierany z SDK :)
źródło
Zgodnie z sugestią Mahometa-Adila dla SDK wer. 21 i nowszych
w XML Działa dla mnie, jest dość łatwe.
źródło
Oto kod służący do zmiany koloru paska postępu w sposób programowy.
źródło
źródło