Chciałbym nieznacznie zmienić kolor standardowego przycisku Androida, aby lepiej pasował do marki klienta.
Najlepszym sposobem, jaki do tej pory znalazłem, jest zmiana Button
szuflady na szufladę w res/drawable/red_button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
<item android:drawable="@drawable/red_button_rest" />
</selector>
Ale zrobienie tego wymaga stworzenia trzech różnych drawables dla każdego przycisku, który chcę dostosować (jeden dla przycisku w spoczynku, jeden po skupieniu i jeden po naciśnięciu). To wydaje się bardziej skomplikowane i pozbawione SUSZENIA niż potrzebuję.
Wszystko, co naprawdę chcę zrobić, to zastosować jakąś transformację kolorów do przycisku. Czy jest łatwiejszy sposób na zmianę koloru przycisku niż ja?
android
android-layout
emmby
źródło
źródło
Odpowiedzi:
Odkryłem, że można to dość łatwo zrobić w jednym pliku. Umieść coś takiego jak poniższy kod w pliku o nazwie,
custom_button.xml
a następnie ustawbackground="@drawable/custom_button"
w widoku przycisków:źródło
"Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')"
Czy są to odniesienia do wbudowanych kolorów? wydaje się, że potrzebuję res / wartości / color.xml, aby to zadziałałoZgodnie z odpowiedzią Tomasza możesz również programowo ustawić odcień całego przycisku za pomocą trybu zwielokrotnienia PorterDuff. Spowoduje to zmianę koloru przycisku, a nie tylko odcień.
Jeśli zaczniesz od standardowego szarego zacienionego przycisku:
da ci czerwony cieniowany przycisk,
da ci zielony przycisk zacieniowany itp., gdzie pierwszą wartością jest kolor w formacie szesnastkowym.
Działa poprzez pomnożenie bieżącej wartości koloru przycisku przez wartość koloru. Jestem pewien, że dzięki tym trybom możesz zrobić znacznie więcej.
źródło
import android.graphics.PorterDuff;
Mike, możesz być zainteresowany kolorowymi filtrami.
Przykład:
spróbuj tego, aby osiągnąć pożądany kolor.
źródło
To jest moje rozwiązanie, które doskonale działa począwszy od API 15 . To rozwiązanie zachowuje wszystkie domyślne efekty kliknięcia przycisku, takie jak materiał
RippleEffect
. Nie testowałem tego na niższych interfejsach API, ale powinno działać.Wszystko, co musisz zrobić, to:
1) Utwórz styl, który zmienia się tylko
colorAccent
:2) Dodaj te dwa wiersze do
button
widżetu:Przykładowy widget przycisku
źródło
colorAccent
wpływa nie tylko na tło przycisku.Teraz można również użyć AppCompat NRPV7 za AppCompatButton z
backgroundTint
atrybutu:źródło
app:backgroundTint
zamiastandroid:backgroundTint
podczas korzystania z AppCompat.Podoba mi się propozycja filtra kolorów w poprzednich odpowiedziach z @conjugatedirection i @Tomasz; Odkryłem jednak, że podany do tej pory kod nie był tak łatwy do zastosowania, jak się spodziewałem.
Po pierwsze, nie wspomniano, gdzie zastosować i wyczyścić filtr kolorów. Możliwe, że są inne dobre miejsca do zrobienia tego, ale przyszło mi do głowy OnTouchListener .
Z mojej lektury pierwotnego pytania idealnym rozwiązaniem byłoby takie, które nie wymaga żadnych zdjęć. Akceptowana odpowiedź przy użyciu custom_button.xml z @emmby jest prawdopodobnie lepszym rozwiązaniem niż filtry kolorów, jeśli taki jest twój cel. W moim przypadku zaczynam od obrazu png od projektanta interfejsu użytkownika, jak ma wyglądać przycisk. Jeśli ustawię tło przycisku dla tego obrazu, domyślna informacja o podświetleniu zostanie całkowicie utracona. Ten kod zastępuje to zachowanie programowym efektem zaciemnienia.
Wyodrębniłem to jako osobną klasę do zastosowania na wielu przyciskach - pokazaną jako anonimowa klasa wewnętrzna, aby pojąć ten pomysł.
źródło
Jeśli tworzysz kolorowe przyciski za pomocą XML, możesz sprawić, że kod będzie trochę czystszy, określając stan skupienia i naciśnięcia w osobnym pliku i wykorzystując je ponownie. Mój zielony przycisk wygląda następująco:
źródło
Najkrótsze rozwiązanie, które działa z dowolną wersją Androida:
Uwagi / wymagania :
app:
nazw i nieandroid:
nazw!Wersja aplikacji> 24.2.0
zależności {kompiluj 'com.android.support:appcompat-v7:25.3.1'}
Objaśnienie :
źródło
app:backgroundTint="@color/my_color"
nie działało.android:backgroundTint="@color/my_color"
działało idealnie.Korzystam z tego podejścia
style.xml
Jak widać z góry, używam niestandardowego stylu dla mojego przycisku. Kolor przycisku odpowiada kolorowi akcentu. Uważam to za znacznie lepsze podejście niż ustawienie,
android:background
ponieważ nie stracę efektu tętnienia, który zapewnia Google.źródło
Jest teraz o wiele łatwiejszy sposób: android-holo-colors.com
Umożliwi to łatwą zmianę kolorów wszystkich holo drawables (guziki, pokrętła, ...). Wybierz kolor, a następnie pobierz plik zip zawierający pliki rysunkowe dla wszystkich rozdzielczości.
źródło
Użyj go w ten sposób:
źródło
W
<Button>
użyciuandroid:background="#33b5e5"
. albo lepiejandroid:background="@color/navig_button"
źródło
DroidUX biblioteka składnik ma
ColorButton
widget, którego kolor może być łatwo zmieniony, zarówno poprzez definicji XML i programowo w czasie wykonywania, więc można nawet pozwolić użytkownikowi ustaw przycisk Color / motywu jeśli aplikacja na to pozwala.źródło
Możesz także użyć tego narzędzia online, aby dostosować przycisk http://angrytools.com/android/button/ i użyć
android:background="@drawable/custom_btn"
do zdefiniowania przycisku dostosowanego w układzie.źródło
Możesz ustawić motyw swojego przycisku do tego
źródło
Prostym sposobem jest po prostu zdefiniowanie niestandardowej klasy Button, która akceptuje wszystkie pożądane właściwości, takie jak promień, gradient, tłoczony kolor, normalny kolor itp., A następnie po prostu używa tego w układach XML zamiast konfigurować tło za pomocą XML. Próbka jest tutaj
Jest to niezwykle przydatne, jeśli masz wiele przycisków o takich samych właściwościach, jak promień, wybrany kolor itp. Możesz dostosować odziedziczony przycisk do obsługi tych dodatkowych właściwości.
Wynik (nie użyto selektora tła).
Normalny przycisk
Wciśnięty przycisk
źródło
Sposób, w jaki robię przycisk w innym stylu, który działa całkiem dobrze, to podklasowanie obiektu Button i zastosowanie filtra kolorów. To również obsługuje stany włączone i wyłączone, stosując alfa do przycisku.
źródło
wartości \ styles.xml
następnie:
źródło
Zgodnie z wytycznymi dotyczącymi projektowania materiałów należy użyć stylu podobnego do poniższego kodu
i w układzie dodaj tę właściwość do przycisku
źródło
To proste .. dodaj tę zależność do swojego projektu i utwórz przycisk z 1. Dowolnym kształtem 2. Dowolnym kolorem 3. Dowolną ramką 4. Z efektami materialnymi
https://github.com/manojbhadane/QButton
źródło