Mengatur warna latar belakang elemen tata letak Android

198

Saya mencoba, agak mengkloning desain suatu kegiatan dari satu set slide pada desain Android UI . Namun saya mengalami masalah dengan tugas yang sangat sederhana.

Saya telah membuat tata letak seperti yang ditunjukkan pada gambar, dan header TextViewdalam a RelativeLayout. Sekarang saya ingin mengubah warna latar belakang RelativeLayout, namun sepertinya saya tidak tahu caranya.

Saya tahu saya bisa mengatur android:backgroundproperti di RelativeLayouttag dalam file XML, tetapi apa yang saya set untuk itu? Saya ingin mendefinisikan warna baru yang dapat saya gunakan di banyak tempat. Apakah itu a drawableatau a string?

Selain itu saya berharap ada cara yang sangat sederhana untuk ini dari dalam desainer UI Android Eclipse bahwa saya harus hilang?

Saya agak frustasi saat ini, karena ini harus menjadi kegiatan yang dilakukan dengan beberapa klik maksimal. Jadi bantuan apa pun sangat kami hargai. :)

Desain aktivitas Android

Bjarke Freund-Hansen
sumber
28
perangkat lunak apa yang Anda gunakan untuk menggambar grafik di sisi kanan?
lucas
8
@ Lucas: Saya tidak menggambar diagram, seperti yang saya catat di pertanyaan, itu dari satu set slide pada desain Android UI. Lihat tautan dalam pertanyaan.
Bjarke Freund-Hansen

Jawaban:

280

Anda dapat menggunakan sumber daya warna sederhana , yang ditentukan biasanya di dalam res/values/colors.xml.

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

dan gunakan ini via android:background="@color/red". Warna ini dapat digunakan di tempat lain juga, misalnya sebagai warna teks. Rujuk dalam XML dengan cara yang sama, atau dapatkan melalui kode getResources().getColor(R.color.red).

Anda juga dapat menggunakan sumber daya apa pun yang dapat digambar sebagai latar belakang, gunakan android:background="@drawable/mydrawable"untuk ini (artinya 9 drawable drawmap, bitmap normal, shape drawables, ..).


sumber
6
Bekerja seperti pesona, terima kasih. Bisakah Anda mengarahkan saya ke referensi di mana saya seharusnya membaca ini?
Bjarke Freund-Hansen
6
Uhh sebenarnya: Tidak. Baru saja mencari dokumen, ini adalah barang android yang cukup standar, tetapi sepertinya tidak ada yang benar-benar didokumentasikan. Baik tutorial di situs dev maupun sampel api tidak memanfaatkan ini. Doc android agak kurang ketika datang ke beberapa fitur. Saya pikir saya mengambilnya secara tidak sengaja di beberapa tutorial eksternal. Biasanya itu ide yang baik untuk menelusuri sampel api dan proyek sampel. Anda dapat menemukan kode di dalam ANDROID_SDK\samplesfolder (untuk berbagai versi android). Seluruh aplikasi sampel api hadir juga sudah diinstal di setiap instance emulator.
2
Juga baru saja memeriksa perancang UI. Tidak ada yang mudah ditemukan. Tapi saya sarankan menulis sesuatu dengan tangan di xml. Perancang baru-baru ini meningkat banyak, tapi menurut saya masih belum bisa digunakan. Tidak hanya beberapa opsi terbatas, tata letak terkadang terlihat sangat berbeda pada perangkat nyata (terutama saat menggunakan sumber daya yang dapat direferensikan. Mereka tidak diskalakan dengan benar atau bahkan tidak ditampilkan sama sekali dalam pengalaman saya) . Uji tata letak Anda di perangkat Anda atau di emulator.
1
untuk beberapa warna "default", Anda dapat menggunakan sintaks ini: android: background = "@ android: color / white"
dalf
1
getResources (). getColor () sudah tidak digunakan lagi sekarang.
Rohit Bandil
90

Jawaban di atas bagus. Anda juga bisa seperti ini secara terprogram jika Anda mau

Pertama, tata letak Anda harus memiliki ID. Tambahkan dengan menulis +idbaris berikut di res / layout / *. Xml

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

Kemudian, dalam kode Java Anda, buat perubahan berikut.

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

Terlepas dari ini, jika Anda memiliki warna yang ditentukan dalam colors.xml, maka Anda juga dapat melakukannya secara terprogram:

rl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
Pembunuh Android
sumber
24
Jika Anda menginginkannya dinamis, saya pikir Anda tidak dapat menggunakan XML.
Guillermo Gutiérrez
1
+1 untuk saya perlu mengubahnya saat runtime menurut bendera status; Saya juga bisa mendapatkan warna asli kembali dengan menggunakan konstanta Color.TRANSPARENT.
Zac
10
@ BjarkeFreund-Hansen Ia mengakui jawaban lain dan menyediakan solusi terprogram ini. Tidak downvote layak.
Anubian Noob
4
@ BjarkeFreund-Hansen, pertanyaannya adalah bagaimana mengatur latar belakang bukan bagaimana mendefinisikan warna, baca dengan benar. Dan bagaimana jika pertanyaannya adalah itu. Saya mengakui itu dan mengatakan "Anda juga bisa seperti" .... jadi dia mungkin pergi atau tidak. Juga dapat membantu orang lain seperti yang sudah Anda lihat. Bisakah kamu ??
Android Killer
7
ditambah satu hanya untuk mengkompensasi yang minus dari @ BjarkeFreund-Hansen
Rahul
42

Anda dapat menggunakan android:background="#DC143C", atau nilai RGB lainnya untuk warna Anda. Saya tidak punya masalah menggunakannya dengan cara ini, seperti yang dinyatakan di sini

yjw
sumber
5
-1 karena saya secara eksplisit menulis "Saya ingin mendefinisikan warna baru yang dapat saya gunakan di banyak tempat" dalam pertanyaan, karena saya tidak ingin meng-hardcode nilai warna, tetapi mendefinisikannya sebagai sumber daya yang dapat saya gunakan di beberapa tempat.
Bjarke Freund-Hansen
6
@ GMsoF: Oh itu berhasil tetapi tidak menjawab pertanyaan.
Bjarke Freund-Hansen
21

Itu

res/values/colors.xml.

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

contoh tidak bekerja untuk saya, tetapi

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

bekerja untuk saya di elemen tata letak relatif sebagai atribut.

pengguna2585548
sumber
10
Apakah Anda lupa untuk membungkus tag warna dengan tag sumber daya?
elimirks
19

Jika Anda ingin mengubah warna dengan cepat (dan Anda tidak menghafal angka Hex) android memiliki beberapa warna yang dapat Anda akses seperti ini:

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

Ada 15 warna yang dapat Anda pilih yang bagus untuk menguji berbagai hal dengan cepat, dan Anda tidak perlu mengatur file tambahan.

Menyiapkan file values ​​/ colors.xml dan menggunakan Hex lurus seperti yang dijelaskan di atas akan tetap berfungsi.

kgibilterra
sumber
4

4 cara yang mungkin, gunakan yang Anda butuhkan.

1. Kotlin

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

2. Pengikatan Data

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

ATAU pernyataan yang lebih berguna-

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

3. XML

<LinearLayout
    android:background="#FFFFFF"

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

4. Jawa

LinearLayout ll = (LinearLayout) findViewById(R.id.your_layout_id);
ll.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
Khemraj
sumber
2

Android studio 2.1.2 (atau mungkin sebelumnya) akan memungkinkan Anda memilih dari roda warna:

Roda Warna di Android Studio

Saya mendapatkan ini dengan menambahkan berikut ini ke tata letak saya:

android:background="#FFFFFF"

Kemudian saya mengklik warna FFFFFF dan mengklik bola lampu yang muncul.

Shygar
sumber
1

Kotlin

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

atau

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

-

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

Jawaban di atas semuanya statis. Saya pikir saya akan memberikan jawaban yang dinamis. Dua file yang perlu disinkronkan adalah relatif foo.xmldengan tata letak dan activity_bar.javayang sesuai dengan kelas Java yang sesuai dengan ini R.layout.foo.

Di foo.xml menetapkan id untuk seluruh tata letak:

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

Dan masuk activity_bar.java atur warna di 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);
        ...
    }
    ...
}

Saya harap ini membantu.

T.Baik
sumber