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.


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);


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.


"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));

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"));

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.


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.


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"

Pertanyaannya memperjelas bahwa perubahan warna harus dinamis.
Peter vdL


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));

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



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.


3

Menyatakan dengan Android 6 menggunakan ContextCompact

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));


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)

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);

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);

        ....


    }

0

Anda harus memberikan intargumen.

Contoh pertama:

view.setBackgroundColor(-500136)

Contoh kedua:

int colorId = R.color.green;

view.setBackgroundResource(colorId);

0

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


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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.