Cara mengatur warna latar belakang Tampilan

179

Saya mencoba mengatur warna latar belakang Tampilan (dalam hal ini Tombol).

Saya menggunakan kode ini:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Itu menyebabkan Tombol menghilang dari layar. Apa yang saya lakukan salah, dan apa cara yang benar untuk mengubah warna latar belakang pada Tampilan apa pun?

Terima kasih.

Peter vdL
sumber
1
Itu terlihat benar. Bahkan, saya pikir Anda tidak perlu memanggil invalidate (). Ketika Anda mengatakan tombolnya menghilang, apakah maksud Anda secara harfiah atau apakah maksud Anda tombol tersebut memiliki teks atau gambar yang hilang?
RickNotFred

Jawaban:

281

Anda membuat tombol Anda transparan. Byte pertama adalah alpha.

Mencoba v.setBackgroundColor(0xFF00FF00);

rainhut
sumber
2
Jawaban EddieB di bawah ini jauh lebih baik karena ini menghilangkan batas dll. Seperti menggarisbawahi EditText
Molten Ice
@aroth lebih baik Color.Green? Jika saya ingin warna yang kompleks dengan argb? ... jawaban Anda sudah usang
delive
2
@delive - Datang lagi? Color.GREEN yang tidak usang, dan termasuk byte alpha. Nilainya 0xff00ff00, persis sama dengan apa yang disarankan dalam jawaban, kecuali itu juga memiliki manfaat yang dapat dibaca manusia . Sebagian besar pengembang lebih suka solusi yang bisa dibaca manusia.
aroth
145

Saat Anda memanggil setBackgoundColor, ia menimpa / menghapus sumber daya latar belakang yang ada, termasuk batas, sudut, bantalan, dll. Apa yang ingin Anda lakukan adalah mengubah warna sumber daya latar belakang yang ada ...

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

Eksperimen dengan PorterDuff.Mode. * Untuk efek yang berbeda.

EddieB
sumber
"menimpa / menghapus sumber daya latar belakang yang ada," tidak juga.
Yousha Aleayoub
2
Saya harus menggunakan hal di atas bersama dengan v.invalidate (); di baris berikutnya.
Hashim Akhtar
1
mencoba waktu yang terbuang ini dan pergi dengan jawaban yang diterima, v.getBackground () memberikan pengecualian nullpointer dan jatuh.
Siddarth G
PorterDuff.Mode.SRC_IN plus ini diselesaikan untuk saya sehingga saya tidak akan kehilangan batas latar belakang saya.
Guilherme Carvalho
123

Beberapa pilihan untuk melakukan ini ...

Atur latar belakang menjadi hijau:

v.setBackgroundColor(0x00FF00);

Atur latar belakang menjadi hijau dengan Alpha :

v.setBackgroundColor(0xFF00FF00);

Atur latar belakang menjadi hijau dengan Color.GREEN konstan:

v.setBackgroundColor(Color.GREEN);

Tetapkan latar belakang ke definisi hijau di Colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>

dan menggunakan:

v.setBackgroundResource(R.color.myGreen);

dan:

v.setBackgroundResource(R.color.myGreenWithAlpha);

atau yang lebih panjang:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));

dan:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));
Jorgesys
sumber
getResources().getColor(...)mendapat stackoverflow.com/questions/31842983/...
Junior Mayhé
5
Ada juga: v.setBackgroundResource(R.color.myGreen);ketika menggunakancolors.xml
grim
Menghapus invalidatepanggilan, karena Anda dapat melihat setBackground... metode yang sudah memanggil itu.
barat
v.setBackgroundColor(0x00FF00);hanya kode mereka yang mereka katakan tidak berfungsi. Saya juga berharap itu transparan.
barat
35

Anda dapat mengatur hex-color ke sumber daya apa pun dengan:

View.setBackgroundColor(Color.parseColor("#e7eecc"));
Vipul Patel
sumber
16
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Kode tidak mengatur tombol ke hijau. Sebaliknya, itu membuat tombol sama sekali tidak terlihat.

Penjelasan: nilai hex warna salah. Dengan nilai Alpha nol, warnanya tidak akan terlihat.

Nilai hex yang benar adalah 0xFF00FF00untuk opacity hijau penuh. Nilai alfa apa pun antara 00 dan FF akan menyebabkan transparansi.

malte kosian
sumber
12

dan apa cara yang benar untuk mengubah warna latar belakang pada Tampilan apa pun?

Apa saja View ? Apa yang Anda miliki benar, meskipun Anda harus menghentikan invalidate()panggilan.

Namun, beberapa Viewssudah memiliki latar belakang. A Button, misalnya, sudah memiliki latar belakang: wajah tombol itu sendiri. Latar belakang ini adalah StateListDrawable, yang dapat Anda temukan di android-2.1/data/res/drawable/btn_default.xmldalam instalasi Android SDK Anda. Itu, pada gilirannya, mengacu pada sekelompok gambar bitmap sembilan-patch, tersedia dalam berbagai kepadatan. Anda perlu mengkloning dan memodifikasi semua itu untuk mencapai tujuan hijau Anda.

Singkatnya, Anda akan lebih baik menemukan pola UI lain daripada berusaha mengubah latar belakang a Button.

CommonsWare
sumber
OK, terima kasih atas penjelasan tentang latar belakang Tombol. Sembilan bitmap patch ( developer.android.com/reference/android/graphics/NinePatch.html ) baru bagi saya. Saya hanya ingin mengubah warna apa pun di layar ketika saya menekan tombol. Tombol berada pada TextView. Mencoba mengubah warna itu, mengarah ke pesan konsol "Waktu tunggu reg pengiriman DDM ... Pengelola Aktivitas: Tidak dapat mengirim potongan DDM 52454151: tidak ada penangan yang ditentukan" dan dialog di layar "aplikasi berhenti secara tak terduga". Kira saya perlu melakukan lebih banyak membaca di UI. Ada petunjuk yang diterima. Terima kasih.
Peter vdL
12

Untuk mengatur warna pertama yang terlihat di layar, Anda juga dapat melakukannya di tata letak yang relevan.xml (desain yang lebih baik) dengan menambahkan properti ini ke Tampilan yang relevan:

android:background="#FF00FF00"
JustinB
sumber
Pertanyaannya memperjelas bahwa perubahan warna harus dinamis.
Peter vdL
11

coba tambahkan:

setBackgroundColor(Color.parseColor("#FF0000"));
Long Rainbow
sumber
6

Saya gunakan di API min 16, target 23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));
Vostro
sumber
Biasanya tidak ada banyak warna standar. Warna baru dapat didefinisikan dalam res / values ​​/ colors seperti yang dijelaskan di sini developer.android.com/samples/BasicMediaRouter/res/values/…
Krystian
5

Anda dapat menggunakan sederhana:

view.setBackgroundColor(Color.parseColor("#FFFFFF"));
daniel kilinskas
sumber
5
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
Gianluca Demarinis
sumber
4

Pertanyaan ini berbicara tentang mengubah warna latar belakang tampilan. Dalam salah satu jawaban, orang tersebut menjelaskan cara mengubah warna latar belakang saat runtime. Jelas Anda akan melihat bagaimana memodifikasi objek lain di layar, tetapi ini akan memberi Anda awal yang baik dengan setidaknya memungkinkan Anda untuk mengubah warna latar belakang tampilan pada klik tombol.

jranchranch
sumber
3

Menyatakan dengan Android 6 menggunakan ContextCompact

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
Raluca Lucaci
sumber
2

Anda dapat menggunakan sederhana:

view.setBackgroundColor(Color.rgb(0, 198, 255));
Mahmoud salah eldien saber
sumber
2

Di kotlin Anda bisa melakukannya seperti ini:

val backgroundColor = R.color.whatever_color_you_like
view.setBackgroundColor(getColorCompat(backgroundColor))

Di mana getColorCompat()fungsi ekstensi:

/**
 * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
 */

 fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)
Pengembang Android
sumber
1
view.setBackgroundColor(R.color.primaryColor);

Menambahkan warna ke nilai warna sebelumnya, jadi saya memiliki warna yang berbeda.

Apa yang berhasil untuk saya adalah:

view.setBackgroundResource(R.color.primaryColor);
meralon
sumber
1

Membiarkan misalkan kita memiliki warna dasar di values=>colors.xmlsebagai:

<resources>
    <color name="primary">#FDD835</color>
</resources>

jadi jika kita ingin menggunakan warna kustom kita ke dalam setBackgroundColor(@ColorInt int Color)maka kita hanya perlu penjelasan @SuppressLint("ResourceAsColor")dengan konstruktor / metode yang akan digunakan sebagai:

    @SuppressLint("ResourceAsColor")
    public _LinearLayout(Context context) {
        super(context);

        // Formatting our layout : )
        super.setBackgroundColor(R.color.primary);

        ....


    }
ForWebTech
sumber
0

Anda harus memberikan intargumen.

Contoh pertama:

view.setBackgroundColor(-500136)

Contoh kedua:

int colorId = R.color.green;

view.setBackgroundResource(colorId);
David Mutenda
sumber
0

Ini seharusnya bekerja dengan baik: v.setBackgroundColor(0xFF00FF00);

nishanuw
sumber
0

Saya mencoba semua cara di atas. Tetapi saya belum mencapai apa yang saya butuhkan. Ini usahaku. Jika Anda menggunakan hexcode untuk warna dan ingin mengatur warna sebagai latar belakang gambar, maka ini adalah kode kotlin.

val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val colorCode = "#ffffff"
canvas.drawColor(Color.parseColor(colorCode))
mImageViewLogo.setImageBitmap(bitmap)
Shaffz
sumber