Ustawiłem poziomo ProgressBar
.
Chciałbym zmienić kolor postępu na żółty.
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="80dip"
android:layout_height="20dip"
android:focusable="false"
style="?android:attr/progressBarStyleHorizontal" />
Problem w tym, że kolor postępu jest różny na różnych urządzeniach. Więc chcę, żeby poprawił kolor postępu.
android
android-progressbar
Nishant Shah
źródło
źródło
Odpowiedzi:
Skopiowałem to z jednej z moich aplikacji, więc jest kilka dodatkowych atrybutów, ale powinienem dać ci pomysł. To pochodzi z układu z paskiem postępu:
Następnie utwórz nowy element rysunkowy z czymś podobnym do następującego (w tym przypadku
greenprogress.xml
):W razie potrzeby możesz zmienić kolory, co da ci zielony pasek postępu.
źródło
android:id="@android:id/progress"
,android:id="@android:id/background"
iandroid:id="@android:id/secondaryProgress"
stanąć na.Prostsze rozwiązanie:
progess_drawable_blue
źródło
Po prostu stwórz styl w
values/styles.xml
.Następnie ustaw ten styl jako swój
ProgressBar
motyw.i nie ma znaczenia, czy pasek postępu jest poziomy czy okrągły. To wszystko.
źródło
Jeśli chcesz zmienić tylko kolor paska postępu, możesz po prostu użyć filtru kolorów w metodzie onCreate () swojego działania:
Pomysł stąd .
Musisz to zrobić tylko dla wersji przed Lollipopem. W Lollipopie możesz użyć atrybutu stylu colorAccent.
źródło
SeekBar
to samo, po prostu dodaj do API 16:seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
. To zmieni kolor tego okrągłego kciuka.setColorFilter()
do rysowania bezpośrednio spowoduje zastosowanie koloru wszędzie. Ponieważ jest to czego nie trzeba, po prostu nazywamutate()
się naDrawable
(czyli jakseekBar.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
dla poziomu API 21 lub wyższego po prostu użyj
źródło
Istnieją 3 sposoby rozwiązania tego pytania:
W szczególności istnieje wiele nieporozumień wokół # 2 i # 3, jak widać w komentarzach do odpowiedzi amfcosta. Ta odpowiedź przyniesie nieprzewidywalne wyniki kolorów za każdym razem, gdy zechcesz ustawić pasek postępu na cokolwiek z wyjątkiem kolorów podstawowych, ponieważ modyfikuje on tylko kolor tła, a rzeczywisty obszar „przycinania” paska postępu nadal będzie żółtą nakładką ze zmniejszonym kryciem. Na przykład, użycie tej metody do ustawienia ciemnofioletowego tła spowoduje, że pasek postępu będzie miał kolor „klipu” o szalonym różowawym kolorze, będący wynikiem mieszania ciemnego fioletu i żółtego poprzez zredukowane alfa.
Tak czy owak, odpowiedź nr 1 doskonale odpowiada Ryan i Štarke, większość odpowiedzi nr 3, ale dla tych, którzy szukają kompletnego rozwiązania nr 2 i 3:
Jak programowo dostosować kolor paska postępu, ale wybrać kolor z wcześniej określonego koloru zadeklarowanego w XML
res / drawable / my_progressbar.xml :
Utwórz ten plik, ale zmień kolory w my_progress i my_secondsProgress:
(UWAGA: to jest tylko kopia rzeczywistego pliku XML definiującego domyślny ProgressBar Android SDK, ale zmieniłem identyfikatory i kolory. Oryginał nosi nazwę progress_horizontal)
W Twojej Javie :
Jak programowo dostosować kolor paska postępu, a także programowo utworzyć kolor
EDYCJA: znalazłem czas na poprawne rozwiązanie tego problemu. Moja poprzednia odpowiedź pozostawiła to nieco niejednoznaczne.
ProgressBar składa się z 3 Drawables w LayerDrawable.
W poniższym przykładzie zmienię kolor głównego paska postępu na cyjan.
Ten przykład ustawił go na jednolity kolor. Możesz ustawić go na kolor gradientu, zastępując
z
Twoje zdrowie.
-Lanca
źródło
ViewUtils
z odniesieniem doContext
, dzięki czemu nie muszę podawać aContext
podczas dzwonieniaconvertDpToPixel()
Jeśli jesteś na poziomie API 21 lub wyższym, możesz użyć następujących atrybutów XML:
źródło
Najprostsze rozwiązanie, które znalazłem, jest takie:
Umieść powyższe w
styles.xml
pliku wres > values
folderze.UWAGA: Jeśli użyjesz innego koloru akcentującego, poprzednie rozwiązania powinny być dobre.
API 21 lub WYŻSZY
źródło
źródło
Dla każdego, kto szuka, jak to zrobić programowo:
Ustawienie identyfikatorów na drawables jest kluczowe i dba o zachowanie granic i aktualnego stanu paska postępu
źródło
Naprawdę przyprawiacie mnie o ból głowy. To, co możesz zrobić, to najpierw stworzyć listę warstw do rysowania za pomocą XML (co oznacza tło jako pierwszą warstwę, do rysowania, które reprezentuje postęp drugorzędny jako druga warstwa, a drugą do rysowania, która reprezentuje podstawowy postęp jako ostatnia warstwa), a następnie zmień kolor na kodzie, wykonując następujące czynności:
Ta metoda zapewnia najlepszą elastyczność wynikającą z zadeklarowania pomiaru oryginalnego elementu do rysowania w formacie xml, BEZ ZMIAN W JEGO STRUKTURZE W PÓŹNIEJSZYM POSTĘPOWANIU, szczególnie jeśli potrzebujesz określić folder ekranu pliku xml, a następnie zmodyfikować TYLKO KOLOR za pomocą kod. Żadnego ponownego tworzenia instancji nowego ShapeDrawable od zera.
źródło
Kolor paska postępu można zmienić w następujący sposób:
/res/values/colors.xml
/res/values/styles.xml
onCreate:
źródło
Utwórz zasób do rysowania, jakiego tła potrzebujesz, w moim przypadku nazwałem go bg_custom_progressbar.xml
Następnie użyj tego niestandardowego tła, takiego jak
U mnie działa dobrze
źródło
W xml:
ViewModel:
źródło
W Bibliotece komponentów materiałów możesz użyć atrybutu
ProgressIndicator
zapp:indicatorColor
atrybutem, aby zmienić kolor:Uwaga : wymaga co najmniej wersji
1.3.0-alpha01
.Za pomocą
ProgressBar
możesz nadpisać kolor używając:z:
źródło
Jeśli chcesz programowo ustawić podstawowy i dodatkowy kolor postępu na poziomy pasek postępu w systemie Android, użyj poniższego fragmentu kodu
źródło