Jak programowo ustawić kolor tła działania na biały?

Odpowiedzi:

142

Uzyskaj uchwyt do używanego układu głównego, a następnie ustaw na nim kolor tła. Układ główny jest tym, z czym nazwiesz 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
źródło
Kiedy to robię, Eclipse oznacza to „Powinien przekazać rozwiązany kolor zamiast identyfikatora zasobu tutaj: getResources (). GetColor (android.R.color.red)”.
joriki
25
Zmień ostatnią linię naroot.setBackgroundColor(getResources().getColor(android.R.color.red));
Luis Mendo
Ta odpowiedź działa; ale nadal nie jest całkowicie zautomatyzowana, jak twierdzi pytający. Proponuję odpowiedź Arunkumara poniżej.
KVISH
263

Dodaj tę pojedynczą linię do swojej aktywności po setContentView()rozmowie

getWindow().getDecorView().setBackgroundColor(Color.WHITE);
Arunkumar
źródło
4
Zgoda. to zmienia kolor okna przed zastosowaniem układu głównego, zaakceptowana odpowiedź zmienia kolor elementu głównego w układzie aktywności
LairdPleng
1
Myślę, że ten powinien być właściwy, jeśli chcesz tylko ustawić kolor tła aktywności.
shanwu
ma moje +1, ponieważ zmienia kolor okna głównego
mparkes
To zdecydowanie najlepsza odpowiedź
1QuickQuestion
To najłatwiejsza metoda. Właściwie lepsze niż zaakceptowane!
Dinith
85

Wolę kolorowanie tematyczne

<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
źródło
22
Jaka jest różnica między windowBackground i colorBackground?
AlikElzin-kilaka
1
Po prostu ustaw windowBackground i działa dobrze. Jaki jest pożytek z colorBackground?
codezjx
8
@ AlikElzin-kilaka: różnica polega na tym, że po uruchomieniu aplikacji android:windowBackgroundnajpierw jest widoczny, przez krótką chwilę, a potem kolor tła układu przejmuje. Więc jeśli użyjesz dwóch różnych kolorów, będzie migotać na ekranie.
Idź do
2
windowBackgroundwpływa tylko na tło okna, ale colorBackgroundma również wpływ na wszystkie widoki. 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>

Innymi słowy, „android: background” to znacznik w kodzie XML, który chcesz zmienić.

Jeśli chcesz dynamicznie aktualizować wartość tła, zobacz:

Ćwiczenie: Zmień kolor tła, SeekBar

I82 Dużo
źródło
Mm dobra uwaga. Cóż, niezależnie od tego, link, który podałem, całkiem łatwo odpowiada na to pytanie.
I82Much
nie sądzę, żebyś podawał mi właściwe wartości dla koloru !! dostałem to z #FFFFFF
SJS
To dobra odpowiedź dla tych z nas, którzy chcą to zrobić w xml i dotarli tutaj przez wyszukiwarkę Google.
Kacy,
9

W Twojej onCreate()metodzie:

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

Musisz także dodać do folderu wartości nowy plik XML o nazwie color.xml i przypisać tam nową właściwość koloru:

color.xml:

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

Pamiętaj, że możesz nazwać color.xmldowolną nazwę, ale odwołujesz się do niej kodem jako R.color.yourId.

EDYTOWAĆ

Ponieważ getResources().getColor()jest przestarzały, użyj getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.main_activity_background_color)); zamiast niego.

Bóg
źródło
8

Możesz użyć tego do wywołania predefiniowanych kolorów Androida:

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

Jeśli chcesz użyć jednego z własnych kolorów niestandardowych, możesz dodać swój kolor niestandardowy do strings.xml, a następnie użyć poniższego, aby go wywołać.

element.setBackgroundColor(R.color.mycolour);

Jeśli jednak chcesz ustawić kolor w swoim layoucie.xml, możesz zmodyfikować i dodać poniższe do dowolnego elementu, który go akceptuje.

android:background="#FFFFFF"
Luke Alderton
źródło
Jeśli używam pierwszej techniki, pojawia się ostrzeżenie, że faktycznie powinien być dostępny w ten sposób: getResources (). GetColor (android.R.color.black);
3

Aby uzyskać widok główny zdefiniowany w pliku xml, bez paska akcji, możesz użyć tego:

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

Tak więc, aby zmienić kolor na biały:

root.setBackgroundResource(Color.WHITE);
KitKat
źródło
3
View randview = new View(getBaseContext());
randview = (View)findViewById(R.id.container);
randview.setBackgroundColor(Color.BLUE);

pracował dla mnie. Dziękuję Ci.

Hemal Adani
źródło
Ta odpowiedź znajduje się w kolejce recenzji postów niskiej jakości, ponieważ jest to tylko kod bez wyjaśnienia. Popraw swoją odpowiedź, wyjaśniając, co robi Twój kod i jak odpowiada na pytanie. Zapoznaj się z tymi poradami dotyczącymi udzielania pomocnych odpowiedzi na pytania dotyczące programowania .
Adi Inbar,
2
Trochę zabawne, że to wyraźnie ustawia tło na niebieskie, a nie białe, zgodnie z życzeniem.
Konrad Lindenbach
1
final View rootView = findViewById(android.R.id.content);
rootView.setBackgroundResource(...);
rds
źródło
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
źródło