Ustawianie koloru tła elementu układu Androida

198

Próbuję, nieco sklonować projekt działania z zestawu slajdów na temat projektu interfejsu użytkownika Androida . Mam jednak problem z bardzo prostym zadaniem.

Utworzyłem układ, jak pokazano na obrazku, a nagłówek to TextViewa RelativeLayout. Teraz chcę zmienić kolor tła RelativeLayout, ale nie wydaje mi się, aby wymyślić, jak to zrobić.

Wiem, że mogę ustawić android:backgroundwłaściwość w RelativeLayoutznaczniku w pliku XML, ale co mam ustawić? Chcę zdefiniować nowy kolor, którego mogę używać w wielu miejscach. Czy to jest drawablea string?

Ponadto spodziewałbym się, że w projektancie interfejsu użytkownika systemu Android Eclipse będzie bardzo prosty sposób, którego muszę brakować?

Jestem trochę sfrustrowany, ponieważ powinna to być czynność wykonywana maksymalnie za pomocą kilku kliknięć. Tak więc każda pomoc jest bardzo doceniana. :)

Projekt aktywności Androida

Bjarke Freund-Hansen
źródło
28
jakiego oprogramowania użyłeś do narysowania wykresu po prawej stronie?
lucas
8
@lucas: Nie rysowałem schematów, jak zauważyłem w pytaniach, pochodzi z zestawu slajdów na temat projektu interfejsu użytkownika Androida. Zobacz link w pytaniu.
Bjarke Freund-Hansen

Odpowiedzi:

280

Możesz użyć prostych zasobów kolorów , określonych zwykle w środku res/values/colors.xml.

<color name="red">#ffff0000</color>

i użyj tego przez android:background="@color/red". Ten kolor może być również używany gdziekolwiek indziej, np. Jako kolor tekstu. Odwołaj się do niego w XML w ten sam sposób lub pobierz za pomocą kodu getResources().getColor(R.color.red).

Możesz także użyć dowolnego zasobu do rysowania jako tła, użyj android:background="@drawable/mydrawable"do tego (to znaczy 9-częściowych drawables, normalne bitmapy, drawable kształtów, ...).


źródło
6
Działa jak urok, dzięki. Czy możesz wskazać mi odniesienie, w którym powinienem to przeczytać?
Bjarke Freund-Hansen
6
Uhh: Nie. Właśnie przeszukałem dokumenty, jest to dość standardowe urządzenie z Androidem, ale wydaje się, że tak naprawdę nigdzie nie zostało to udokumentowane. Ani tutoriale na stronie deweloperskiej, ani próbki API nie korzystają z tego. Dokumentowi systemu Android brakuje nieco, jeśli chodzi o niektóre funkcje. Myślę, że podniosłem go przypadkowo w niektórych zewnętrznych tutorialach. Zazwyczaj jednak dobrym pomysłem jest przeglądanie próbek API i przykładowych projektów. Możesz znaleźć kod w ANDROID_SDK\samplesfolderze (dla różnych wersji Androida). Cała przykładowa aplikacja API jest również wstępnie instalowana w każdej instancji emulatora.
2
Właśnie sprawdziłem projektanta interfejsu użytkownika. Nic łatwego do znalezienia. Ale i tak zalecam ręczne pisanie w xml. Projektant ostatnio bardzo się poprawił, ale moim zdaniem nadal nie nadaje się do użytku. Niektóre opcje są nie tylko ograniczone, ale układ czasami wygląda zupełnie inaczej na prawdziwym urządzeniu (szczególnie przy korzystaniu z odnośnych zasobów do rysowania. Nie skalują się one poprawnie lub nawet z mojego doświadczenia nie są wyświetlane) . Przetestuj swoje układy na urządzeniu lub emulatorze.
1
dla niektórych „domyślnych” kolorów możesz użyć tej składni: android: background = "@ android: color / white"
dal
1
getResources (). getColor () jest teraz przestarzałe.
Rohit Bandil
90

Powyższe odpowiedzi są miłe. Możesz również tak postępować programowo, jeśli chcesz

Po pierwsze, twój układ powinien mieć identyfikator. Dodaj go, pisząc następujący +idwiersz w res / layout / *. Xml

<RelativeLayout ...
...
android:id="@+id/your_layout_id"
...
</RelativeLayout>

Następnie w kodzie Java wprowadź następujące zmiany.

RelativeLayout rl = (RelativeLayout)findViewById(R.id.your_layout_id);
rl.setBackgroundColor(Color.RED);

poza tym, jeśli masz kolor zdefiniowany w colors.xml, możesz także zrobić programowo:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
Android Killer
źródło
24
Jeśli chcesz, aby był dynamiczny, myślę, że nie możesz używać XML.
Guillermo Gutiérrez
1
+1, ponieważ muszę go zmienić w czasie wykonywania zgodnie z flagą statusu; Mogłem również odzyskać oryginalny kolor, używając stałej Color.TRANSPARENT.
Zac
10
@ BjarkeFreund-Hansen Potwierdza inne odpowiedzi i zapewnia to programowe rozwiązanie. Nie godny pochwały.
Anubian Noob,
4
@ BjarkeFreund-Hansen, pytanie brzmi: jak ustawić tło, a nie jak zdefiniować kolor, czytaj poprawnie. A co jeśli pytanie dotyczy tego pytania? Przyznaję to i powiedziałem „możesz też iść jak… .... aby mógł odejść lub nie. Może też pomóc innym, jak już widzieliście. czy możesz ??
Android Killer
7
plus jeden, aby zrekompensować minus jeden z @ BjarkeFreund-Hansen
Rahul
42

Możesz użyć android:background="#DC143C"lub dowolnych innych wartości RGB dla swojego koloru. Nie mam problemu z wykorzystaniem go w ten sposób, jak podano tutaj

yjw
źródło
5
-1, ponieważ wyraźnie napisałem „Chcę zdefiniować nowy kolor, którego mogę używać w wielu miejscach” w pytaniu, ponieważ nie chciałem zakodować wartości koloru, ale zdefiniować go jako zasób, którego mogę używać w kilku miejscach.
Bjarke Freund-Hansen
6
@GMsoF: Och, to działa, ale nie odpowiada na pytanie.
Bjarke Freund-Hansen
21

The

res/values/colors.xml.

<color name="red">#ffff0000</color>
android:background="@color/red"

przykład nie działał dla mnie, ale

android:background="#(hexidecimal here without these parenthesis)"

pracował dla mnie w elemencie układu względnego jako atrybut.

użytkownik2585548
źródło
10
Czy zapomniałeś owinąć znacznik koloru znacznikiem zasobów?
elimirks,
19

Jeśli chcesz szybko zmienić kolor (i nie masz zapamiętanych numerów heksadecymalnych), Android ma kilka gotowych kolorów, do których możesz uzyskać dostęp w następujący sposób:

android:background="@android:color/black"

Dostępnych jest 15 kolorów, z których można szybko przetestować i nie trzeba konfigurować dodatkowych plików.

Konfigurowanie pliku values ​​/ colors.xml i używanie prostego Hex, jak wyjaśniono powyżej, nadal będzie działać.

kgibilterra
źródło
4

4 możliwe sposoby, użyj jednego, którego potrzebujesz.

1. Kotlin

val ll = findViewById<LinearLayout>(R.id.your_layout_id)
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white))

2. Powiązanie danych

<LinearLayout
    android:background="@{@color/white}"

LUB bardziej przydatne oświadczenie

<LinearLayout
    android:background="@{model.colorResId}"

3. XML

<LinearLayout
    android:background="#FFFFFF"

<LinearLayout
    android:background="@color/white"

4. Java

LinearLayout ll = (LinearLayout) findViewById(R.id.your_layout_id);
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
Khemraj
źródło
2

Android studio 2.1.2 (lub być może wcześniej) pozwala wybierać z koła kolorów:

Koło kolorów w Android Studio

Mam to, dodając następujące do mojego układu:

android:background="#FFFFFF"

Następnie kliknąłem kolor FFFFFF i kliknąłem żarówkę, która się pojawiła.

Shygar
źródło
1

Kotlin

linearLayout.setBackgroundColor(Color.rgb(0xf4,0x43,0x36))

lub

<color name="newColor">#f44336</color>

-

linearLayout.setBackgroundColor(ContextCompat.getColor(vista.context, R.color.newColor))
Bemtorres
źródło
0

Odpowiedzi są przede wszystkim statyczne. Myślałem, że udzielę dynamicznej odpowiedzi. Dwa pliki, które będą musiały być zsynchronizowane, są względne foo.xmlz układem i activity_bar.javaodpowiadają odpowiadającej temu klasie Java R.layout.foo.

W foo.xmlustawieniu identyfikatora dla całego układu:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/foo" .../>

I w activity_bar.javazestawie kolor w onCreate():

public class activity_bar extends AppCompatActivty {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.foo);

            //Set an id to the layout
        RelativeLayout currentLayout = 
                    (RelativeLayout) findViewById(R.id.foo);

        currentLayout.setBackgroundColor(Color.RED);
        ...
    }
    ...
}

Mam nadzieję, że to pomoże.

T.Woody
źródło