Jadi saya sudah mulai menggunakan Snackbar baru di Design Support Library, tetapi saya menemukan bahwa saat Anda mendefinisikan "android: textColor" di tema Anda, ini berlaku untuk warna teks snackbar. Ini jelas menjadi masalah jika warna teks utama Anda gelap.
Adakah yang tahu cara mengatasi ini atau memiliki saran tentang bagaimana saya harus mewarnai teks saya?
EDIT Januari 2017: (Pasca-Jawaban)
Meskipun ada beberapa solusi khusus untuk memperbaiki masalah di bawah ini, sebaiknya berikan cara yang benar untuk tema Snackbars.
Pertama, Anda mungkin tidak harus mendefinisikan android:textColor
tema Anda sama sekali (kecuali Anda benar-benar tahu ruang lingkup apa yang menggunakan tema). Ini mengatur warna teks pada dasarnya setiap tampilan yang terhubung ke tema Anda. Jika Anda ingin menentukan warna teks dalam tampilan Anda yang bukan default, gunakan android:primaryTextColor
dan rujuk atribut itu dalam tampilan kustom Anda.
Namun, untuk menerapkan tema ke Snackbar
, lihat panduan kualitas ini dari dokumen materi pihak ketiga: http://www.materialdoc.com/snackbar/ (Ikuti implementasi tema terprogram agar tidak bergantung pada gaya xml)
Sebagai referensi:
// create instance
Snackbar snackbar = Snackbar.make(view, text, duration);
// set action button color
snackbar.setActionTextColor(getResources().getColor(R.color.indigo));
// get snackbar view
View snackbarView = snackbar.getView();
// change snackbar text color
int snackbarTextId = android.support.design.R.id.snackbar_text;
TextView textView = (TextView)snackbarView.findViewById(snackbarTextId);
textView.setTextColor(getResources().getColor(R.color.indigo));
// change snackbar background
snackbarView.setBackgroundColor(Color.MAGENTA);
(Anda juga dapat membuat Snackbar
layout kustom Anda sendiri juga, lihat link di atas. Lakukan jika metode ini terasa terlalu hacky dan Anda ingin cara yang pasti dapat diandalkan agar Snackbar kustom Anda bertahan melalui kemungkinan update support library).
Dan sebagai alternatif, lihat jawaban di bawah untuk jawaban yang serupa dan mungkin lebih cepat untuk menyelesaikan masalah Anda.
android:textColorPrimary
Jawaban:
Saya tahu ini sudah dijawab tetapi cara termudah yang saya temukan adalah langsung di make menggunakan
Html.fromHtml
metode danfont
tagsumber
Saya menemukan ini di Apa saja fitur baru Pustaka Dukungan Desain Android dan cara menggunakan Snackbar-nya?
Ini berhasil bagi saya untuk mengubah warna teks di Snackbar.
PEMBARUAN: ANDROIDX: Seperti yang dblackker tunjukkan di komentar, dengan pustaka dukungan AndroidX yang baru, kode untuk menemukan ID Snackbar TextView berubah menjadi:
sumber
snackbar_action
alih-alihsnackbar_text
. Lihat jawaban ini untuk contoh: stackoverflow.com/a/36800101/293280snack.view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
Peretasan
android.support.design.R.id.snackbar_text
itu rapuh, cara yang lebih baik atau lebih baik untuk melakukannya adalah:sumber
Membuat fungsi ekstensi kotlin yang saya gunakan dalam proyek saya:
Penggunaan seperti yang Anda harapkan:
sumber
com.google.android.material.R.id.snackbar_text
jika Anda bermigrasi ke AndroidX.Baiklah jadi saya memperbaikinya dengan pada dasarnya mengatur ulang cara saya melakukan warna teks.
Dalam tema terang saya, saya setel
android:textColorPrimary
ke yangnormal dark text
saya inginkan, dan saya setelandroid:textColor
kewhite
.Saya memperbarui semua tampilan teks dan tombol saya agar memiliki
android:textColor="?android:attr/textColorPrimary".
Jadi karena snackbar diambil dari
textColor
, saya hanya menyetel semua teks saya yang lain ketextColorPrimary
.EDIT JANUARI 2017: ---------------------------------------------- ------
Jadi seperti yang dikatakan oleh komentar, dan seperti yang dinyatakan dalam pertanyaan asli yang telah diedit di atas, Anda mungkin tidak perlu menentukan
android:textColor
tema Anda, karena ini mengubah warna teks dari setiap tampilan di dalam tema.sumber
android:textColor
tema Anda sama sekali. Itu adalah atribut gaya dariTextView
. Jika Anda menentukannya dalam tema Anda, Anda mengganti warna teks dari setiapTextView
atauButton
yang tidak menentukan warna teksnya dalam XML. Itu juga merupakan pesan snackbar yang biasanya mengambil warna dari hamparan tema gelapnya .Salah satu pendekatannya adalah dengan menggunakan span:
Dengan span, Anda juga dapat menambahkan beberapa warna dan gaya di dalam satu Snackbar. Ini panduan yang bagus:
https://androidbycode.wordpress.com/2015/06/06/material-design-snackbar-using-the-design-support-library/
sumber
Jika Anda bermigrasi ke penggunaan androidX
com.google.android.material.R.id.snackbar_text
bukanandroid.support.design.R.id.snackbar_text
untuk mengubah warna teks pada snackbar.sumber
Satu-satunya cara saya melihat adalah menggunakan
getView()
dan bersepeda melalui anaknya. Saya tidak tahu apakah itu akan berhasil, dan itu buruk seperti yang terlihat. Saya berharap mereka akan segera menambahkan beberapa API tentang masalah ini.sumber
Jika Anda akan memigrasi kode ke AndroidX, properti TextView sekarang:
sumber
Inilah yang saya gunakan saat saya membutuhkan warna khusus
Dan dikonsumsi sebagai:
sumber
Saya mengubah tema saya
untuk
Berhasil. Coba gunakan tema sederhana alih-alih tema terang atau lainnya.
sumber
Jika Anda memutuskan untuk menggunakan solusi dirty and hacky dengan menemukan TextView di Snackbar berdasarkan id dan Anda sudah bermigrasi ke androidx, berikut kodenya:
sumber
Anda dapat menggunakan perpustakaan ini: https://github.com/SandroMachado/restaurant
Penafian: Saya membuat perpustakaan.
sumber
Temukan menurut id tidak berfungsi untuk saya, jadi saya menemukan solusi lain:
sumber
Gunakan yang
Snackbar
disertakan dalam Material Components Library dan terapkansetTextColor
untuk menentukan warna tekssetActionTextColor
untuk menentukan warna teks yang digunakan oleh aksi. Anda dapat menggunakan warna atau pemilih warnasetBackgroundTint
untuk menentukan warna latar belakang dari SnackbarSesuatu seperti:
sumber
Saat ini (Januari 2020) dengan
com.google.android.material:material:1.2.0
dan mungkin juga1.1.0
Jelas merupakan cara terbaik untuk melakukannya dengan mengganti gaya berikut:
Jika Anda menggunakan tema material dengan
.Bridge
di bagian akhir, karena alasan tertentu, tak satu pun dari gaya ini yang ditentukan. Jadi Snackar akan menggunakan beberapa tata letak lama tanpa gaya ini.Saya menemukan di kode sumber bahwa keduanya
snackbarButtonStyle
dansnackbarTextViewStyle
harus didefinisikan jika tidak maka tidak akan digunakan.sumber
Saya memiliki kode sederhana yang akan membantu mendapatkan contoh dari kedua tampilan teks Snackbar, setelah itu Anda dapat memanggil semua metode yang berlaku pada tampilan teks.
sumber
Hanya untuk menghemat waktu pengembangan Anda yang berharga, berikut adalah metode statis yang saya gunakan:
Beginilah tampilannya:
sumber
Jika Anda berada di Kotlin , Anda dapat membuat ekstensi:
Penggunaan :
sumber
Sesuai dengan komponen Jitpack AndroidX baru
Gunakan ekstensi ini yang telah saya buat
Gunakan seperti ini
sumber
Ini adalah solusi saya untuk mengatasi masalah jenis ini dalam
androidx
penggunaankotlin
Anda perlu menginisialisasi metode
mContent
di dalamonViewCreated
seperti di bawah inisumber
Saya juga memperhatikan masalah yang sama. Berkat jawaban di sini, saya telah membuat kelas kecil, yang dapat membantu memecahkan masalah ini dengan lebih mudah, hanya dengan mengganti ini:
dengan ini:
Ini kelas saya:
}
sumber