Como definir a cor de plano de fundo de uma atividade para branco programaticamente?

128

Como posso definir a cor de plano de fundo de uma atividade como branca programaticamente?

SJS
fonte

Respostas:

142

Identifique o layout raiz usado e defina a cor do plano de fundo. O layout raiz é o que você chamou de setContentView.

 setContentView(R.layout.main);

  // Now get a handle to any View contained 
  // within the main layout you are using
  View someView = findViewById(R.id.randomViewInMainLayout);

  // Find the root view
  View root = someView.getRootView();

  // Set the color
  root.setBackgroundColor(getResources().getColor(android.R.color.red));
Hamy
fonte
Quando faço isso, o Eclipse o sinaliza com "Deve passar a cor resolvida em vez da identificação do recurso aqui: getResources (). GetColor (android.R.color.red)".
Joriki #
25
Alterar última linha pararoot.setBackgroundColor(getResources().getColor(android.R.color.red));
Luis Mendo
Essa resposta funciona; mas ainda não é completamente programático conforme o questionador. Eu sugeriria a resposta de Arunkumar abaixo.
KVISH
263

Adicione esta linha única em sua atividade, após a setContentView()chamada

getWindow().getDecorView().setBackgroundColor(Color.WHITE);
Arunkumar
fonte
4
acordado. isso muda a cor da janela antes de o layout raiz é aplicada, a resposta aceita muda a cor do elemento raiz no layout da atividade
LairdPleng
1
Acho que este deve ser o correto, se você quiser apenas definir a cor de fundo da atividade.
Shanwu
tem o meu +1 à medida que muda a cor da janela raiz
mparkes
Esta é definitivamente a melhor resposta.
1QuickQuestion 14/10
Este é o método mais fácil para fazer isso. Na verdade, melhor do que o aceito!
Dinith 18/10/19
85

Eu prefiro colorir por tema

<style name="CustomTheme" parent="android:Theme.Light">
    <item name="android:windowBackground">@color/custom_theme_color</item>
    <item name="android:colorBackground">@color/custom_theme_color</item>
</style>
David
fonte
22
Qual é a diferença entre windowBackground e colorBackground?
AlikElzin-Kilaka
1
Basta definir o windowBackground e ele funciona bem. Qual é a utilidade do colorBackground?
Codecjx
8
@ AlikElzin-kilaka: a diferença é que, quando o aplicativo inicia, o android:windowBackgroundé visível primeiro, por um breve momento, e depois a cor do plano de fundo do layout assume o controle. Portanto, se você usar duas cores diferentes, ele piscará na tela.
GoTo
2
windowBackgroundafeta apenas o plano de fundo da janela, mas também colorBackgroundafeta todas as visualizações. stackoverflow.com/questions/26266221/...
fdermishin
60
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:id="@+id/myScreen"
</LinearLayout>

Em outras palavras, "android: background" é a tag no XML que você deseja alterar.

Se você precisar atualizar dinamicamente o valor em segundo plano, consulte o seguinte:

Exercício: Mude a cor de fundo, por SeekBar

I82Much
fonte
Bom ponto. Bem, independentemente disso, o link que eu dei responde a essa pergunta com bastante facilidade.
precisa saber é o seguinte
Eu não acho que você me dê os valores certos para a cor !! Eu consegui com #FFFFFF
SJS
Esta é uma boa resposta para aqueles que desejam fazê-lo em xml e chegaram aqui por meio de uma pesquisa no google.
25415 Kacy
9

No seu onCreate()método:

getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.main_activity_background_color));

Além disso, você precisa adicionar à pasta de valores um novo arquivo XML chamado color.xmle Atribuir uma nova propriedade de cor:

color.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="main_activity_background_color">#000000</color>
</resources>

Observe que você pode nomear o color.xmlnome que quiser, mas se refere a ele por código como R.color.yourId.

EDITAR

Como getResources().getColor()está obsoleto, use em seu getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.main_activity_background_color)); lugar.

Deus
fonte
8

Você pode usar isso para chamar cores android predefinidas:

element.setBackgroundColor(android.R.color.red);

Se você quiser usar uma de suas próprias cores personalizadas, poderá adicionar sua cor personalizada a strings.xml e, em seguida, usar o abaixo para chamá-lo.

element.setBackgroundColor(R.color.mycolour);

No entanto, se você quiser definir a cor em seu layout.xml, poderá modificar e adicionar o item abaixo a qualquer elemento que a aceite.

android:background="#FFFFFF"
Luke Alderton
fonte
Se eu usar a primeira técnica, recebo um aviso de que ela deve ser acessada da seguinte maneira: getResources (). GetColor (android.R.color.black);
3

Para obter a visualização raiz definida no seu arquivo xml, sem barra de ação, você pode usar o seguinte:

View root = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);

Então, para mudar a cor para branco:

root.setBackgroundResource(Color.WHITE);
KitKat
fonte
3
View randview = new View(getBaseContext());
randview = (View)findViewById(R.id.container);
randview.setBackgroundColor(Color.BLUE);

trabalhou para mim. obrigado.

Hemal Adani
fonte
Esta resposta está na fila de revisão de Postagens de baixa qualidade, porque é apenas um código sem explicação. Melhore sua resposta explicando o que seu código faz e como ele responde à pergunta. Leia este conselho sobre como responder a perguntas de programação de maneira útil .
Adi Inbar
2
Meio engraçado que isso defina claramente o plano de fundo para azul e não branco, conforme solicitado.
Konrad Lindenbach
1
final View rootView = findViewById(android.R.id.content);
rootView.setBackgroundResource(...);
rds
fonte
1
Button btn;
View root;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button)findViewById(R.id.button);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            root =findViewById(R.id.activity_main).getRootView();
            root.setBackgroundColor(Color.parseColor("#FFFFFF"));
        }
    });
}
Saleem Kalro
fonte