Saya menampilkan snackbar di DialogFragment Dalam klik Positif dari alertDialog. Ini potongan kode saya.
Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG)
.setAction("Action", null);
View sbView = snackbar.getView();
sbView.setBackgroundColor(Color.BLACK);
snackbar.show();
Saya melewati tampilan dialogfragment ke snackbar. Saya ingin warna latar belakang hitam? Bagaimana saya bisa melakukan ini? Saya mengembalikan alertDialog di DialogFragment. Dan tema yang saya atur ke dialog sebagai berikut
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">@color/accent</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">@color/primary</item>
<!-- Used for the background -->
<item name="android:background">@color/white</item>
</style>
Meskipun saya menyetel warna latar belakang menjadi putih untuk dialog, itu harus diganti dengan menyetel warna latar belakang ke snackbar.
Jawaban:
Coba atur warna latar belakang seperti ini:
Ini akan berhasil 100%!
sumber
snackBarView.getView().setBackgrondColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
sbView.setBackgroundColor(getResources().getColor(R.color.BLACK))
getResources#getColor
sudah tidak digunakan lagi sejak API level 23 (Marshmallow) danContextCompat#getColor
sebaiknya digunakan sebagai gantinya.Anda bisa melakukannya seperti ini
sumber
Jika Anda ingin menentukan warna latar belakang untuk semua Snackbar Anda, cukup timpa
design_snackbar_background_color
nilainya di suatu tempat di sumber daya Anda. Sebagai contoh:sumber
Karena tidak ada jawaban lain yang memberikan penggantian gaya kustom (yang saya anggap sebagai salah satu cara pembaruan teraman untuk melakukan itu), saya memposting di sini solusi saya.
Saya memposting solusi yang sudah membahas tema
AndroidX
(support design 28
) baru .Asalkan aplikasi Anda menggunakan kustom mereka yang disebut
MyAppTheme
di AndaAndroidManifest.xml
:Buat (jika Anda belum melakukannya)
values/style.xml
file yang menggantikan tema yang digunakan oleh aplikasi Anda:dan berikan warna Anda pada
values/colors.xml
file AndaUPDATE 2020
Karena solusi di atas menghilangkan sudut bundar dari snacker karena pengaturan latar belakang dengan cara ini menggunakan desain snackbar lama, jika Anda ingin mempertahankan desain material Anda bisa.
ganti
android:background
denganandroid:backgroundTint
Jika Anda menargetkan API <21, maka jika Anda memutuskan untuk menggunakan snackbar lama untuk API <21, Anda dapat menyetelnya
MySnackbarStyle
di folder res / values-21 / dan membiarkan gaya - lama - sebelumnya di folder res / values Anda .Jika Anda menargetkan API <21 dan Anda ingin memiliki gaya material dari snackbar juga di tingkat API yang lebih rendah ini, Anda dapat mengubah gaya snackbar Anda di res / values / dengan cara ini:
dan pinjam
my_snackbar_background
dari repo resmi Anda , dengan cara ini:Ini adalah repo taman bermain .
sumber
my_snackbar_background
. Tanpanya Snackbar menggambar dengan sudut yang lebih bulat.Versi Kotlin (dengan ekstensi ):
Buat dalam file (misalnya SnackbarExtension.kt) ekstensi:
Selanjutnya, di Aktivitas / Fragmen Anda, Anda akan dapat melakukan ini:
sumber
Kode di bawah ini berguna untuk mengubah warna teks pesan.
Cara Kedua: Anda juga dapat mengubah warna dengan mengubah tema kegiatan.
sumber
Sudah terlambat tetapi jika seseorang masih membutuhkan bantuan. Inilah solusi yang berhasil.
sumber
Saat Bekerja dengan xamarin android saya menemukan bahwa ContextCompat.GetColor () mengembalikan Int tetapi setBackgroundColor () mengharapkan Parameter bertipe Color. Jadi, inilah cara saya membuatnya berfungsi di proyek android xamarin saya.
sumber
View snckView = snackbarview.View;
bukannyasnackbar.getView();
tidak tersedia tapiParseColor
tidak berfungsi.System.Drawing.Color.ParseColor
sebagai gantinyaAndroid.Graphics.Color.ParseColor
. sekarang saya punya: "nama 'getstring' tidak ada dalam konteks saat ini"Dengan
Snackbar
disertakan dalam Material Components Library(com.google.android.material.snackbar.Snackbar
) cukup gunakansetBackgroundTint
metode ini.sumber
Saya membuat sedikit kelas utils sehingga saya dapat dengan mudah membuat snackbar berwarna kustom melalui aplikasi.
lalu untuk menggunakannya, seperti ini di mana pun di aplikasi:
sumber
Taruh di kelas Utilitas:
Menggunakan seperti ini:
sumber
Pada dasarnya solusi yang diberikan memiliki satu kelemahan. Mereka mengubah bentuk snackbar dan menghilangkan radius.
Secara pribadi, lebih suka yang seperti itu
sumber
Tidak ada solusi lain yang benar-benar berhasil untuk saya. Jika saya hanya menyetel warna latar belakang Snackbar, tata letak di bawah TextView dan Tombol dalam warna default. Jika saya menyetel latar belakang TextView, ia akan berkedip sedikit setelah SnackBar ditampilkan. Dan tata letak sekitar tombol masih dalam warna default.
Pada akhirnya saya menemukan bahwa cara terbaik bagi saya adalah mengubah warna latar belakang induk TextView (SnackbarContentLayout). Sekarang seluruh Snackbar diwarnai dengan benar dan tidak berkedip saat muncul.
sumber
setBackgroundResource()
bekerja dengan baik.sumber
Saya tidak tahu mengapa setBackgroundColor () tidak ditemukan dalam proyek saya. Itulah mengapa saya membuat fungsi ekstensi dan sekarang tidak masalah.
dan menyebutnya seperti di bawah
activity_login.xml
LoginActivity.kt
sumber
}
sumber