Próbuję ustawić kolor tła widoku (w tym przypadku przycisku).
Używam tego kodu:
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();
Powoduje to zniknięcie przycisku z ekranu. Co robię źle i jaki jest właściwy sposób zmiany koloru tła w dowolnym widoku?
Dzięki.
Odpowiedzi:
Twój przycisk jest przezroczysty. Pierwszy bajt to alfa.
Próbować
v.setBackgroundColor(0xFF00FF00);
źródło
0xff00ff00
, dokładnie tak samo jak to, co sugeruje odpowiedź, oprócz tego, że ma również taką zaletę, że czytelny dla człowieka . Większość programistów wolałaby rozwiązanie czytelne dla człowieka.Kiedy wywołujesz setBackgoundColor, nadpisuje / usuwa wszelkie istniejące zasoby tła, w tym wszelkie obramowania, narożniki, wypełnienie itp. To, co chcesz zrobić, to zmienić kolor istniejącego zasobu tła ...
Eksperymentuj z PorterDuff.Mode. *, Aby uzyskać różne efekty.
źródło
Kilka opcji, aby to zrobić ...
Ustaw zielone tło:
Ustaw zielone tło za pomocą Alpha :
Ustaw tło na zielone za pomocą stałej Color.GREEN:
Ustaw tło na zielone, definiując je w Colors.xml
i używając:
i:
lub dłużej zdyszany:
i:
źródło
getResources().getColor(...)
został wycofany stackoverflow.com/questions/31842983/…v.setBackgroundResource(R.color.myGreen);
podczas używaniacolors.xml
invalidate
wywołania, jak widać,setBackground...
metody już to wywołują.v.setBackgroundColor(0x00FF00);
to tylko ich kod, o którym mówią, że nie działa. Spodziewałbym się również, że będzie przejrzysty.Możesz ustawić kolor szesnastkowy dla dowolnego zasobu za pomocą:
źródło
Kod nie ustawia przycisku na zielono. Zamiast tego sprawia, że przycisk jest całkowicie niewidoczny.
Wyjaśnienie: wartość szesnastkowa koloru jest nieprawidłowa. Przy wartości alfa równej zero kolor będzie niewidoczny.
Prawidłowa wartość szesnastkowa jest
0xFF00FF00
dla pełnego krycia w kolorze zielonym. Każda wartość alfa między 00 a FF spowodowałaby przezroczystość.źródło
Na jakimkolwiek
View
? To, co masz, jest poprawne, ale powinieneś przerwaćinvalidate()
połączenie.Jednak niektórzy
Views
mają już tło. NaButton
przykład A ma już tło: przód samego przycisku. To tło to plikStateListDrawable
, który można znaleźć wandroid-2.1/data/res/drawable/btn_default.xml
instalacji Android SDK. To z kolei odnosi się do zbioru dziewięciopłatowych obrazów bitmapowych, dostępnych w wielu gęstościach. Będziesz musiał sklonować i zmodyfikować to wszystko, aby osiągnąć swoje zielone cele.Krótko mówiąc, lepiej będzie znaleźć inny wzorzec interfejsu użytkownika, niż próbować zmienić tło pliku
Button
.źródło
Aby ustawić pierwszy kolor, który będzie widoczny na ekranie, możesz to również zrobić w odpowiednim pliku layout.xml (lepszy projekt), dodając tę właściwość do odpowiedniego widoku:
źródło
spróbuj dodać:
źródło
Używam przy API min 16, cel 23
źródło
Możesz w prosty sposób użyć:
źródło
źródło
To pytanie dotyczy zmiany koloru tła widoku. W jednej z odpowiedzi osoba wyjaśnia, jak zmienić kolor tła w czasie działania. Oczywiście zamierzasz przyjrzeć się, jak modyfikować inne obiekty na ekranie, ale powinno to dać ci dobry początek, przynajmniej umożliwiając modyfikowanie koloru tła widoku po kliknięciu przycisku.
źródło
W przypadku systemu Android 6 użyj ContextCompact
źródło
Możesz w prosty sposób użyć:
źródło
W Kotlinie można to zrobić tak:
Gdzie
getColorCompat()
jest funkcja rozszerzenia:źródło
Dodaje kolor do poprzedniej wartości koloru, więc mam inny kolor.
U mnie działa:
źródło
Załóżmy, że mamy kolor podstawowy w
values=>colors.xml
postaci:więc jeśli chcemy użyć naszego niestandardowego koloru
setBackgroundColor(@ColorInt int Color)
, potrzebujemy tylko adnotacji@SuppressLint("ResourceAsColor")
z konstruktorem / metodą, która zostanie użyta jako:źródło
Musisz przekazać
int
argument.Pierwszy przykład:
Drugi przykład:
źródło
To powinno działać dobrze:
v.setBackgroundColor(0xFF00FF00);
źródło
Wypróbowałem wszystkie powyższe sposoby. Ale nie udało mi się osiągnąć tego, czego potrzebuję. Oto moja próba. Jeśli używasz kodu szesnastkowego dla koloru i chcesz ustawić kolor jako tło obrazu, to jest to kod kotlin.
źródło