apa yang kamu maksud dengan roti panggang khusus? apa yang ingin kamu tunjukkan?
thepoosh
Ini bukanlah pertanyaan yang sebenarnya. Anda harus mencoba membaca dokumen di developer.android
adatapost
Saya memiliki kotak pesan khusus. Jika Anda dapat menyesuaikannya dan menambahkan pengatur waktu ke dalamnya dan mengubah tampilannya, saya mempostingnya untuk Anda. Bisakah kamu?
"(ViewGroup) findViewById (R.id.toast_layout_root)" dapat diganti dengan "null". Karena aktivitas Anda tidak berisi toast_layout, jadi akan selalu nihil.
stevo.mit
2
Toast kustom saya tidak muncul karena saya menggunakan Constraint Layout baru sebagai tampilan root toast kustom saya. Setelah saya mengubah ke Linear Layout, semuanya bekerja dengan sempurna. Jadi berhati-hatilah ...
Charles Woodson
benar-benar ada yang bisa menjelaskan tujuan findViewById (R.id.toast_layout_root)? toh itu akan menjadi nol, dan bekerja dengan baik hanya dengan melewatkan nol
gunakan ini jika Anda mengalami crash karena findViewById null: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee
38
Bersulang adalah untuk menampilkan pesan dalam interval waktu yang singkat; Jadi, sesuai pemahaman saya, Anda ingin menyesuaikannya dengan menambahkan gambar ke dalamnya dan mengubah ukuran, warna teks pesan. Jika hanya itu yang ingin Anda lakukan, tidak perlu membuat tata letak terpisah dan memekarnya ke instance Toast.
Tampilan Toast default berisi TextViewuntuk menampilkan pesan di dalamnya. Jadi, jika kita memiliki referensi id sumber daya itu TextView, kita bisa bermain dengannya. Jadi di bawah ini adalah apa yang dapat Anda lakukan untuk mencapai ini:
Toast toast =Toast.makeText(this,"I am custom Toast!",Toast.LENGTH_LONG);View toastView = toast.getView();// This'll return the default View of the Toast./* And now you can get the TextView of the default View of the Toast. */TextView toastMessage =(TextView) toastView.findViewById(android.R.id.message);
toastMessage.setTextSize(25);
toastMessage.setTextColor(Color.RED);
toastMessage.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.ic_fly,0,0,0);
toastMessage.setGravity(Gravity.CENTER);
toastMessage.setCompoundDrawablePadding(16);
toastView.setBackgroundColor(Color.CYAN);
toast.show();
Dalam kode di atas, Anda dapat melihat, Anda dapat menambahkan gambar ke TextView melalui setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)posisi mana pun yang relatif terhadap TextView yang Anda inginkan.
Ada kemungkinan yang sangat kecil untuk ini, tetapi tetap saja, saya pikir cek untuk itu TextViewharus ada di sana, hanya untuk aman dan dengan cek, maksud saya cek nol atau cek tipe. Untuk berjaga-jaga, google memutuskan untuk mengubah id atau tampilan untuk menampilkan teks di kelas Toast. Pokoknya ... +1
DroidDev
1
Benar! Tetapi jika itu diubah, Anda tidak akan dapat mengakses id sumber daya karena tidak ada. Tetapi meskipun berada di sisi yang aman, pemeriksaan NULL akan membuat hidup Anda mudah. @DroidDev terima kasih atas sarannya :)
TheLittleNaruto
16
LANGKAH 1:
Pertama buat tata letak untuk roti panggang khusus di res/layout/custom_toast.xml:
LANGKAH 2: Dalam kode Aktivitas, dapatkan tampilan khusus di atas dan lampirkan ke Toast:
// Get your custom_toast.xml ayoutLayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(R.layout.custom_toast,(ViewGroup) findViewById(R.id.custom_toast_layout_id));// set a messageTextView text =(TextView) layout.findViewById(R.id.text);
text.setText("Button is clicked!");// Toast...Toast toast =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Untuk bantuan lebih lanjut, lihat cara kami Membuat Toast khusus di Android:
Lihat tautan di sini . Anda menemukan solusi Anda. Dan coba:
Membuat Tampilan Toast Kustom
Jika pesan teks sederhana tidak cukup, Anda dapat membuat tata letak yang disesuaikan untuk pemberitahuan toast Anda. Untuk membuat tata letak kustom, tentukan tata letak View, dalam XML atau dalam kode aplikasi Anda, dan teruskan objek View root ke metode setView (View).
Misalnya, Anda dapat membuat tata letak untuk roti panggang yang terlihat di tangkapan layar di sebelah kanan dengan XML berikut (disimpan sebagai toast_layout.xml):
Perhatikan bahwa ID elemen LinearLayout adalah "toast_layout". Anda harus menggunakan ID ini untuk memekarkan tata letak dari XML, seperti yang ditunjukkan di sini:
LayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(R.layout.toast_layout,(ViewGroup) findViewById(R.id.toast_layout_root));ImageView image =(ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);TextView text =(TextView) layout.findViewById(R.id.text);
text.setText("Hello! This is a custom toast!");Toast toast =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Pertama, ambil LayoutInflater dengan getLayoutInflater () (atau getSystemService ()), lalu perbesar tata letak dari XML menggunakan inflate (int, ViewGroup). Parameter pertama adalah ID resource layout dan yang kedua adalah View root. Anda bisa menggunakan layout yang diperbesar ini untuk menemukan lebih banyak objek View dalam layout, jadi sekarang tangkap dan tentukan konten untuk elemen ImageView dan TextView. Terakhir, buat Toast baru dengan Toast (Konteks) dan setel beberapa properti toast, seperti gravitasi dan durasi. Kemudian panggil setView (View) dan teruskan layout yang digelembungkan. Anda sekarang bisa menampilkan toast dengan tata letak kustom Anda dengan memanggil show ().
Catatan: Jangan gunakan konstruktor publik untuk Toast kecuali Anda akan mendefinisikan layout dengan setView (View). Jika Anda tidak memiliki tata letak khusus untuk digunakan, Anda harus menggunakan makeText (Context, int, int) untuk membuat Toast.
Saya pikir sebagian besar contoh xml customtoast di seluruh Internet didasarkan pada sumber yang sama.
Dokumentasi Android, menurut saya sudah sangat usang. fill_parent tidak boleh digunakan lagi. Saya lebih suka menggunakan wrap_content yang dikombinasikan dengan xml.9.png. Dengan begitu, Anda dapat menentukan ukuran minimum toastbackground di seluruh ukuran sumber yang diberikan.
Jika toast yang lebih kompleks diperlukan, bingkai atau tata letak relatif harus digunakan sebagai ganti LL.
Untuk menghindari masalah dengan layout_ * params yang tidak digunakan dengan benar, Anda perlu memastikan bahwa saat Anda memekarkan tata letak kustom, Anda menentukan ViewGroup yang benar sebagai induk.
Banyak contoh memberikan null di sini, tetapi Anda dapat meneruskan Toast ViewGroup yang ada sebagai orang tua Anda.
val toast =Toast.makeText(this,"",Toast.LENGTH_LONG)
val layout =LayoutInflater.from(this).inflate(R.layout.view_custom_toast, toast.view.parent as?ViewGroup?)
toast.view = layout
toast.show()
Di sini kami mengganti tampilan Toast yang ada dengan tampilan kustom kami. Setelah Anda memiliki referensi ke tata letak "tata letak", Anda kemudian dapat memperbarui setiap tampilan gambar / teks yang mungkin ada di dalamnya.
Solusi ini juga mencegah crash "Tampilan tidak dilampirkan ke window manager" menggunakan null sebagai induk.
Selain itu, hindari menggunakan ConstraintLayout sebagai root layout kustom Anda, ini tampaknya tidak berfungsi saat digunakan di dalam Toast.
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.android_examples.com.toastbackgroundcolorchange.MainActivity"><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="CLICK HERE TO SHOW TOAST MESSAGE WITH DIFFERENT BACKGROUND COLOR INCLUDING BORDER"/></RelativeLayout>
Kode untuk file layout toast_background_color.xml dibuat di folder res-> layout.
Toast kustom dari latar belakang diblokir, Android 11 melindungi pengguna dengan menghentikan tampilan roti panggang kustom. Demi alasan keamanan dan untuk mempertahankan pengalaman pengguna yang baik, sistem memblokir toast yang berisi tampilan khusus jika toast tersebut dikirim dari latar belakang oleh aplikasi yang menargetkan Android 11.
Metode addCallback () ditambahkan di Android R Jika Anda ingin diberi tahu saat toast (teks atau kustom) muncul atau menghilang.
Teks paling penting dalam toast API mengubah bahwa untuk aplikasi yang menargetkan Android 11 , getView()metode ini mengembalikan nol saat Anda mengaksesnya, Jadi, pastikan untuk melindungi aplikasi Anda dari PENGECUALIAN FATAL, Anda tahu maksud saya :)
Menggunakan pustaka bernama Toasty, saya pikir Anda memiliki cukup fleksibilitas untuk membuat roti panggang yang disesuaikan dengan pendekatan berikut -
Toasty.custom(yourContext,"I'm a custom Toast", yourIconDrawable, tintColor, duration, withIcon,
shouldTint).show();
Anda juga dapat mengirimkan teks yang diformat ke Toasty dan ini cuplikan kodenya
Jawaban:
Gunakan kode di bawah ini dari Toast kustom. Ini dapat membantu Anda.
toast.xml
MainActivity.java
Dan lihat tautan di bawah ini juga untuk Toast khusus.
Toast Kustom dengan Jam Analog
YouTube: Membuat Toast Kustom Dengan Tombol di Android Studio
sumber
Bersulang adalah untuk menampilkan pesan dalam interval waktu yang singkat; Jadi, sesuai pemahaman saya, Anda ingin menyesuaikannya dengan menambahkan gambar ke dalamnya dan mengubah ukuran, warna teks pesan. Jika hanya itu yang ingin Anda lakukan, tidak perlu membuat tata letak terpisah dan memekarnya ke instance Toast.
Tampilan Toast default berisi
TextView
untuk menampilkan pesan di dalamnya. Jadi, jika kita memiliki referensi id sumber daya ituTextView
, kita bisa bermain dengannya. Jadi di bawah ini adalah apa yang dapat Anda lakukan untuk mencapai ini:Dalam kode di atas, Anda dapat melihat, Anda dapat menambahkan gambar ke TextView melalui
setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
posisi mana pun yang relatif terhadap TextView yang Anda inginkan.Memperbarui:
Telah menulis kelas pembangun untuk menyederhanakan tujuan di atas; Ini tautannya: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc
Cek
HowToUse.kt
di link di atas.Keluaran:
sumber
TextView
harus ada di sana, hanya untuk aman dan dengan cek, maksud saya cek nol atau cek tipe. Untuk berjaga-jaga, google memutuskan untuk mengubah id atau tampilan untuk menampilkan teks di kelas Toast. Pokoknya ... +1LANGKAH 1:
Pertama buat tata letak untuk roti panggang khusus di
res/layout/custom_toast.xml
:LANGKAH 2: Dalam kode Aktivitas, dapatkan tampilan khusus di atas dan lampirkan ke Toast:
Untuk bantuan lebih lanjut, lihat cara kami Membuat Toast khusus di Android:
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
sumber
Lihat tautan di sini . Anda menemukan solusi Anda. Dan coba:
Membuat Tampilan Toast Kustom
Jika pesan teks sederhana tidak cukup, Anda dapat membuat tata letak yang disesuaikan untuk pemberitahuan toast Anda. Untuk membuat tata letak kustom, tentukan tata letak View, dalam XML atau dalam kode aplikasi Anda, dan teruskan objek View root ke metode setView (View).
Misalnya, Anda dapat membuat tata letak untuk roti panggang yang terlihat di tangkapan layar di sebelah kanan dengan XML berikut (disimpan sebagai toast_layout.xml):
Perhatikan bahwa ID elemen LinearLayout adalah "toast_layout". Anda harus menggunakan ID ini untuk memekarkan tata letak dari XML, seperti yang ditunjukkan di sini:
Pertama, ambil LayoutInflater dengan getLayoutInflater () (atau getSystemService ()), lalu perbesar tata letak dari XML menggunakan inflate (int, ViewGroup). Parameter pertama adalah ID resource layout dan yang kedua adalah View root. Anda bisa menggunakan layout yang diperbesar ini untuk menemukan lebih banyak objek View dalam layout, jadi sekarang tangkap dan tentukan konten untuk elemen ImageView dan TextView. Terakhir, buat Toast baru dengan Toast (Konteks) dan setel beberapa properti toast, seperti gravitasi dan durasi. Kemudian panggil setView (View) dan teruskan layout yang digelembungkan. Anda sekarang bisa menampilkan toast dengan tata letak kustom Anda dengan memanggil show ().
Catatan: Jangan gunakan konstruktor publik untuk Toast kecuali Anda akan mendefinisikan layout dengan setView (View). Jika Anda tidak memiliki tata letak khusus untuk digunakan, Anda harus menggunakan makeText (Context, int, int) untuk membuat Toast.
sumber
Tata letak kustom untuk roti panggang,
custom_toast.xml
:Dan metode Java (cukup berikan pesan roti panggang ke metode ini):
sumber
Anda dapat mengunduh kode di sini .
Langkah 1:
Langkah 2:
Langkah 3:
sumber
Saya pikir sebagian besar contoh xml customtoast di seluruh Internet didasarkan pada sumber yang sama.
Dokumentasi Android, menurut saya sudah sangat usang. fill_parent tidak boleh digunakan lagi. Saya lebih suka menggunakan wrap_content yang dikombinasikan dengan xml.9.png. Dengan begitu, Anda dapat menentukan ukuran minimum toastbackground di seluruh ukuran sumber yang diberikan.
Jika toast yang lebih kompleks diperlukan, bingkai atau tata letak relatif harus digunakan sebagai ganti LL.
toast.xml
background.xml
background_96 adalah background_96.9.png.
Ini tidak diuji dengan baik, dan petunjuk sangat dihargai :)
sumber
Untuk menghindari masalah dengan layout_ * params yang tidak digunakan dengan benar, Anda perlu memastikan bahwa saat Anda memekarkan tata letak kustom, Anda menentukan ViewGroup yang benar sebagai induk.
Banyak contoh memberikan null di sini, tetapi Anda dapat meneruskan Toast ViewGroup yang ada sebagai orang tua Anda.
Di sini kami mengganti tampilan Toast yang ada dengan tampilan kustom kami. Setelah Anda memiliki referensi ke tata letak "tata letak", Anda kemudian dapat memperbarui setiap tampilan gambar / teks yang mungkin ada di dalamnya.
Solusi ini juga mencegah crash "Tampilan tidak dilampirkan ke window manager" menggunakan null sebagai induk.
Selain itu, hindari menggunakan ConstraintLayout sebagai root layout kustom Anda, ini tampaknya tidak berfungsi saat digunakan di dalam Toast.
sumber
Ini yang saya gunakan
AllMethodsInOne.java
YourFile.java
Saat menelepon, tulis saja di bawah ini.
sumber
Kode untuk file MainActivity.java.
Kode untuk file tata letak activity_main.xml.
Kode untuk file layout toast_background_color.xml dibuat di folder res-> layout.
sumber
// Kelas roti panggang khusus tempat Anda dapat menampilkan roti panggang khusus atau default sesuai keinginan)
sumber
Cara Sederhana untuk Menyesuaikan Toast,
sumber
Untuk semua Pengguna Kotlin
Anda dapat membuat Ekstensi seperti berikut:
sumber
Sangat mudah untuk membuat kebiasaan kita sendiri
Toast
.Ikuti saja langkah-langkah di bawah ini.
Langkah 1
Buat tata letak kustom yang Anda inginkan
Langkah 2
Sekarang buat kelas kustom yang diperluas dengan
Toast
.Kami telah membuat roti panggang khusus.
Langkah-3
Sekarang, akhirnya, bagaimana kita bisa menggunakannya.
Nikmati!!
sumber
Perhatian, Pembaruan untuk bersulang di Android 11
Metode addCallback () ditambahkan di Android R Jika Anda ingin diberi tahu saat toast (teks atau kustom) muncul atau menghilang.
Teks paling penting dalam toast API mengubah bahwa untuk aplikasi yang menargetkan Android 11 ,
getView()
metode ini mengembalikan nol saat Anda mengaksesnya, Jadi, pastikan untuk melindungi aplikasi Anda dari PENGECUALIAN FATAL, Anda tahu maksud saya :)sumber
Menggunakan pustaka bernama Toasty, saya pikir Anda memiliki cukup fleksibilitas untuk membuat roti panggang yang disesuaikan dengan pendekatan berikut -
Anda juga dapat mengirimkan teks yang diformat ke Toasty dan ini cuplikan kodenya
sumber
Referensi: https://developer.android.com/guide/topics/ui/notifiers/toasts
sumber