Definindo a cor de fundo do elemento de layout do Android

198

Estou tentando, de certa forma, clonar o design de uma atividade a partir de um conjunto de slides no design da interface do usuário do Android . No entanto, estou tendo um problema com uma tarefa muito simples.

Eu criei o layout como mostrado na imagem, e o cabeçalho é um TextViewem a RelativeLayout. Agora, desejo alterar a cor de fundo do arquivo RelativeLayout, mas não consigo descobrir como.

Sei que posso definir a android:backgroundpropriedade na RelativeLayouttag no arquivo XML, mas o que devo definir? Eu quero definir uma nova cor que eu possa usar em vários lugares. É um drawableou um string?

Além disso, eu esperaria que houvesse uma maneira muito simples de fazer isso dentro do designer de interface do usuário do Eclipse Android, que eu devo estar perdendo?

Atualmente, estou um pouco frustrado, pois essa deve ser uma atividade realizada com apenas alguns cliques. Portanto, qualquer ajuda é muito apreciada. :)

Design de atividade do Android

Bjarke Freund-Hansen
fonte
28
qual software você usou para desenhar o gráfico no lado direito?
lucas
8
@ Lucas: Eu não desenhei os diagramas, como observei nas perguntas, é de um conjunto de slides no design da interface do usuário do Android. Veja o link na pergunta.
Bjarke Freund-Hansen

Respostas:

280

Você pode usar recursos de cores simples , especificados geralmente dentro res/values/colors.xml.

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

e use isso via android:background="@color/red". Essa cor também pode ser usada em qualquer outro lugar, por exemplo, como uma cor de texto. Referencie-o em XML da mesma maneira ou obtenha-o no código via getResources().getColor(R.color.red).

Você também pode usar qualquer recurso desenhável como plano de fundo, use android:background="@drawable/mydrawable"para isso (isso significa desenhos de 9 patches, bitmaps normais, desenhos de formas, etc.).


fonte
6
Funciona como um encanto, obrigado. Você poderia me indicar a referência onde eu deveria ter lido isso?
Bjarke Freund-Hansen
6
Na verdade: Não. Acabei de pesquisar nos documentos, esse é um material padrão para o Android, mas não parece realmente documentado. Nem os tutoriais no site dev nem as amostras da API fazem uso disso. O documento do Android está um pouco ausente quando se trata de alguns recursos. Eu acho que peguei por acidente em alguns tutoriais externos. Normalmente, é uma boa ideia procurar as amostras da API e os projetos de amostra. Você pode encontrar o código dentro da ANDROID_SDK\samplespasta (para várias versões do Android). Todo o aplicativo de amostra da API também vem pré-instalado em todas as instâncias do emulador.
2
Também verifiquei o designer da interface do usuário. Nada fácil de ser encontrado. Mas eu recomendo escrever as coisas manualmente no xml de qualquer maneira. O designer melhorou muito recentemente, mas ainda não é utilizável na minha opinião. Além de algumas opções serem limitadas, o layout às vezes parece completamente diferente em um dispositivo real (especialmente ao usar recursos desenháveis ​​referenciados. Eles não são dimensionados corretamente ou nem são exibidos na minha experiência) . Teste seus layouts no seu dispositivo ou em um emulador.
1
para algumas cores "padrão", você pode usar esta sintaxe: android: background = "@ android: color / white"
dalf
1
getResources (). getColor () está obsoleto agora.
Rohit Bandil
90

As respostas acima são legais. Você também pode fazer isso de forma programática, se quiser

Primeiro, seu layout deve ter um ID. Adicione-o escrevendo a seguinte +idlinha em res / layout / *. Xml

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

Em seguida, no seu código Java, faça as seguintes alterações.

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

além disso, se você tiver a cor definida em colors.xml, também poderá fazer programaticamente:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
Android Killer
fonte
24
Se você quiser dinâmico, acho que não pode usar XML.
Guillermo Gutiérrez
1
+1, pois preciso alterá-lo em tempo de execução, de acordo com o sinalizador de status; Também pude recuperar a cor original usando a constante Color.TRANSPARENT.
Zac
10
@ BjarkeFreund-Hansen Ele reconhece as outras respostas e fornece esta solução programática. Não digno de voto negativo.
Anubian Noob
4
@ BjarkeFreund-Hansen, a questão é como definir o plano de fundo e não como definir a cor, leia corretamente. E daí se a pergunta estiver sobre isso. Eu reconheço isso e disse "você também pode ir" ... para que ele possa ir ou não. Também pode ajudar os outros, como você já viu. você pode ??
Android Killer
7
mais um apenas para compensar o menos de @ BjarkeFreund-Hansen
Rahul
42

Você pode usar android:background="#DC143C"ou qualquer outro valor RGB para sua cor. Não tenho nenhum problema em usá-lo dessa maneira, como indicado aqui

yjw
fonte
5
-1 porque escrevi explicitamente "Quero definir uma nova cor que possa ser usada em vários locais" na pergunta, porque não queria codificar o valor da cor, mas defini-lo como um recurso que posso usar em vários locais.
Bjarke Freund-Hansen
6
@GMsoF: Oh, funciona, mas não responde à pergunta.
Bjarke Freund-Hansen
21

o

res/values/colors.xml.

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

exemplo não funcionou para mim, mas o

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

trabalhou para mim no elemento de layout relativo como um atributo.

user2585548
fonte
10
Você esqueceu de envolver a marca colorida com uma marca de recursos?
elimirks
19

Se você deseja alterar uma cor rapidamente (e você não tem números hexadecimais memorizados), o Android possui algumas cores predefinidas que você pode acessar assim:

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

Você pode escolher entre 15 cores, o que é bom para testar rapidamente as coisas e não é necessário configurar arquivos adicionais.

A configuração de um arquivo values ​​/ colors.xml e o uso do Hex direto, como explicado acima, ainda funcionarão.

kgibilterra
fonte
4

4 maneiras possíveis, use uma que você precisa.

1. Kotlin

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

2. Ligação de Dados

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

OU declaração mais útil

<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
fonte
2

O Android studio 2.1.2 (ou possivelmente anterior) permitirá escolher entre uma roda de cores:

Roda de cores no Android Studio

Eu consegui isso adicionando o seguinte ao meu layout:

android:background="#FFFFFF"

Depois, cliquei na cor FFFFFF e na lâmpada que apareceu.

Shygar
fonte
1

Kotlin

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

ou

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

-

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

As respostas acima de tudo são estáticas. Eu pensei que daria uma resposta dinâmica. Os dois arquivos que precisam estar sincronizados são os relativos foo.xmlao layout e activity_bar.javacorrespondem à classe Java correspondente a esteR.layout.foo .

Em foo.xmldefinir um ID para todo o layout:

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

E em activity_bar.javadefinir a cor no 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);
        ...
    }
    ...
}

Eu espero que isso ajude.

T.Woody
fonte