Impostazione del colore di sfondo dell'elemento layout Android


198

Sto cercando di clonare in qualche modo il design di un'attività da una serie di diapositive sul design dell'interfaccia utente Android . Tuttavia sto riscontrando un problema con un compito molto semplice.

Ho creato il layout come mostrato nell'immagine e l'intestazione è a TextViewin a RelativeLayout. Ora desidero cambiare il colore di sfondo di RelativeLayout, tuttavia non riesco a capire come.

So di poter impostare la android:backgroundproprietà nel RelativeLayouttag nel file XML, ma su cosa devo impostarla? Voglio definire un nuovo colore che posso usare in più punti. È un drawableo un string?

Inoltre, mi aspetto che ci sia un modo molto semplice per farlo all'interno del designer dell'interfaccia utente Android di Eclipse che mi devo perdere?

Sono un po 'frustrato al momento, poiché questa dovrebbe essere un'attività che viene eseguita con pochi clic al massimo. Quindi ogni aiuto è molto apprezzato. :)

Progettazione di attività Android


28
quale software hai usato per disegnare il grafico sul lato destro?
Lucas,

8
@lucas: non ho disegnato i diagrammi, come ho notato nelle domande, proviene da una serie di diapositive sul design dell'interfaccia utente Android. Vedi il link nella domanda.
Bjarke Freund-Hansen,

Risposte:


280

È possibile utilizzare semplici risorse di colore , specificate di solito all'interno res/values/colors.xml.

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

e usalo tramite android:background="@color/red". Questo colore può essere utilizzato anche altrove, ad esempio come colore del testo. Fare riferimento in XML nello stesso modo o ottenerlo nel codice tramite getResources().getColor(R.color.red).

Puoi anche usare qualsiasi risorsa disegnabile come sfondo, usa android:background="@drawable/mydrawable"per questo (questo significa 9patch drawable, bitmap normali, shape drawable, ..).


6
Funziona come un incantesimo, grazie. Potresti indicarmi il riferimento dove avrei dovuto leggere questo?
Bjarke Freund-Hansen,

6
Uhh in realtà: No. Ho appena cercato i documenti, questa è roba Android piuttosto standard, ma sembra che non sia documentata da nessuna parte. Né i tutorial sul sito di sviluppo né i campioni di API fanno uso di questo. Il documento Android è in qualche modo carente quando si tratta di alcune funzionalità. Penso di averlo raccolto per caso in alcuni tutorial esterni. Di solito è una buona idea sfogliare i campioni API e progetti di esempio però. Puoi trovare il codice all'interno della ANDROID_SDK\samplescartella (per varie versioni di Android). L'intera app di esempio API viene anche preinstallata in ogni istanza dell'emulatore.

2
Inoltre ho appena controllato il designer dell'interfaccia utente. Niente di facile da trovare. Ma consiglio comunque di scrivere le cose a mano nell'xml. Il designer è migliorato molto di recente, ma secondo me non è ancora utilizzabile. Non solo alcune opzioni sono limitate, il layout a volte sembra completamente diverso su un dispositivo reale (specialmente quando si utilizzano risorse disegnabili referenziate. Non vengono ridimensionate correttamente o non vengono nemmeno visualizzate affatto nella mia esperienza) . Metti alla prova i tuoi layout sul tuo dispositivo o su un emulatore.

1
per alcuni colori "predefiniti", puoi utilizzare questa sintassi: android: background = "@ android: color / white"
dalf

1
getResources (). getColor () ora è deprecato.
Rohit Bandil,

90

Le risposte di cui sopra sono belle. Puoi anche andare così programmaticamente se vuoi

Innanzitutto, il layout dovrebbe avere un ID. Aggiungilo scrivendo la seguente +idriga in res / layout / *. Xml

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

Quindi, nel tuo codice Java, apporta le seguenti modifiche.

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

a parte questo, se hai il colore definito in colors.xml, puoi anche fare programmaticamente:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));

24
Se lo vuoi dinamico, penso che non puoi usare XML.
Guillermo Gutiérrez,

1
+1 per ho bisogno di cambiarlo in fase di esecuzione in base allo status flag; Sono stato anche in grado di ripristinare il colore originale utilizzando la costante Color.TRANSPARENT.
Zac,

10
@ BjarkeFreund-Hansen Riconosce le altre risposte e fornisce questa soluzione programmatica. Non degno di voto.
Anubian Noob,

4
@ BjarkeFreund-Hansen, la domanda è come impostare lo sfondo e non come definire il colore, leggere correttamente. E quindi se la domanda fosse su questo. Lo riconosco e ho detto "puoi anche andare come" ... quindi potrebbe andare o no. Inoltre può aiutare gli altri come già hai visto. Puoi ??
Android Killer

7
più uno solo per compensare quello meno di @ BjarkeFreund-Hansen
Rahul

42

Puoi usare android:background="#DC143C"o qualsiasi altro valore RGB per il tuo colore. Non ho problemi a usarlo in questo modo, come indicato qui


5
-1 perché ho scritto esplicitamente "Voglio definire un nuovo colore che posso usare in più punti" nella domanda, perché non volevo codificare il valore del colore, ma definirlo come una risorsa che posso usare in più punti.
Bjarke Freund-Hansen,

6
@GMsoF: Oh, funziona ma non risponde alla domanda.
Bjarke Freund-Hansen,

21

Il

res/values/colors.xml.

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

esempio non ha funzionato per me, ma il

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

ha funzionato per me nel relativo elemento di layout come attributo.


10
Hai dimenticato di avvolgere il tag colore con un tag risorse?
elimirks,

19

Se vuoi cambiare rapidamente un colore (e non hai numeri esadecimali memorizzati) Android ha alcuni colori preimpostati a cui puoi accedere in questo modo:

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

Puoi scegliere tra 15 colori, che è utile per testare rapidamente le cose e non è necessario impostare file aggiuntivi.

L'impostazione di un file valori / colors.xml e l'utilizzo di Hex dritto come spiegato sopra funzionerà comunque.


4

4 modi possibili, utilizzare quello che ti serve.

1. Kotlin

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

2. Rilegatura dei dati

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

O una dichiarazione più utile-

<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));

2

Android studio 2.1.2 (o forse prima) ti permetterà di scegliere da una ruota dei colori:

Ruota dei colori in Android Studio

Ho ottenuto questo aggiungendo quanto segue al mio layout:

android:background="#FFFFFF"

Quindi ho cliccato sul colore FFFFFF e ho fatto clic sulla lampadina che è apparso.


1

Kotlin

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

o

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

-

linearLayout.setBackgroundColor(ContextCompat.getColor(vista.context, R.color.newColor))

0

Le risposte soprattutto sono statiche. Ho pensato di fornire una risposta dinamica. I due file che dovranno essere sincronizzati sono relativi foo.xmlal layout e activity_bar.javache corrispondono alla classe Java corrispondente a questoR.layout.foo .

Nel foo.xmlset un id per l'intero layout:

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

E in activity_bar.javaset il colore in 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);
        ...
    }
    ...
}

Spero che aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.