Snackbar tidak mengizinkan Anda menyetel tata letak khusus. Namun, seperti yang disarankan Primoz990, Anda bisa mendapatkan Tampilan Snackbar. Fungsi getView mengembalikan Snackbar.SnackbarLayout, yang merupakan objek LinearLayout horizontal yang anaknya adalah TextView dan Button. Untuk menambahkan View Anda sendiri ke Snackbar, Anda hanya perlu menyembunyikan TextView, dan menambahkan View Anda ke Snackbar.SnackbarLayout.
// Create the Snackbar
Snackbar snackbar = Snackbar.make(containerLayout, "", Snackbar.LENGTH_LONG);
// Get the Snackbar's layout view
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
// Hide the text
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
// Inflate our custom view
View snackView = mInflater.inflate(R.layout.my_snackbar, null);
// Configure the view
ImageView imageView = (ImageView) snackView.findViewById(R.id.image);
imageView.setImageBitmap(image);
TextView textViewTop = (TextView) snackView.findViewById(R.id.text);
textViewTop.setText(text);
textViewTop.setTextColor(Color.WHITE);
//If the view is not covering the whole snackbar layout, add this line
layout.setPadding(0,0,0,0);
// Add the view to the Snackbar's layout
layout.addView(snackView, 0);
// Show the Snackbar
snackbar.show();
Ini dimungkinkan mulai dari revisi 25.1.0 Android Support Library
I. Deklarasikan tata letak khusus di folder nilai / tata letak Anda.
Petunjuk:
@dimen/design_snackbar
nilai untuk menyesuaikan dengan pedoman desain material.?attr/colorAccent
untuk menerapkan perubahan Tema Aplikasi Anda ke Snackbar.II. Perluas kelas BaseTransientBottomBar .
AKU AKU AKU. Tambahkan BaseTransientBottomBar.ContentViewCallback
IV. Tambahkan metode untuk membuat Snackbar dengan tata letak khusus dan metode untuk mengisinya.
V. Membuat instance dari
CustomSnackbar
dan memanggilshow()
metode.Lihat lebih lanjut tentang Snackbar dan penyesuaiannya di materialdoc.com
CustomSnackbar.class
Kode lengkap :sumber
Cara XML:
File xml layout asli yang digunakan untuk
Snackbar
adalah file ini:design_layout_snackbar_include.xml
:Jadi untuk menimpa tata letak ini Anda harus menulis tata letak Anda sendiri dengan yang sama
android:id
seperti di ini dan direfs.xml
file Anda, Anda harus menambahkan baris ini:sumber
BaseTransientBottomBar
, per stackoverflow.com/a/41154330/9636Jawabannya adalah: Jangan sesuaikan Snackbar. Ini tidak boleh berisi lebih dari satu teks pendek dan satu tindakan. Lihat pedoman desain Material Google .
UPDATE: Jika Anda tetap ingin menyesuaikan Snackbar, inilah yang telah saya terapkan di aplikasi saya:
Saya belum pernah mencoba, tetapi dengan mendapatkan tampilan root dari Snackbar, Anda dapat menambahkan tampilan baru ke Snackbar secara terprogram.
sumber
Di onCreate of the Activity:
sumber
Saya mencobanya dan berhasil!
sumber
Coba kode berikut.
catatan:
sumber
Untuk menambah jawaban Yakiv Mospan, untuk membuat
BaseTransientBottomBar
acara khusus Anda dari bawah sepertiSnackbar
, salin metode ini dariSnackbar
kelas untuk menemukan orang tua yang cocok untukBaseTransientBottomBar
konstruktor.sumber
Versi Kotlin untuk jawaban yang diterima: https://stackoverflow.com/a/33441214/2437655
sumber
Berikut kode kelas util saya untuk kotlin: https://gist.github.com/Ryszardenko/db429bc7d177e646ffe27e0672a0958c#file-customsnackbar-kt
cancelFun () adalah lambda, secara default kosong - Anda bisa lewat di sana misalnya fungsi "undo".
sumber
Anda dapat mencoba perpustakaan ini. Ini adalah pembungkus untuk snackbar default android. https://github.com/ChathuraHettiarachchi/CSnackBar
atau Anda bahkan dapat menggunakan tampilan Anda sendiri,
Saat ini satu-satunya masalah dengan tata letak khusus adalah, kita perlu meneruskan ketinggian tampilan dalam dp sebagai masukan
sumber