Toast khusus di Android: contoh sederhana

117

Saya baru mengenal pemrograman Android. Apa contoh sederhana yang menunjukkan pemberitahuan toast khusus di Android?

Sandy
sumber
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?
Bobs
1
Di sini Anda dapat menemukan contoh dasar "Toast Kustom" stackoverflow.com/questions/3500197/…
Jorgesys

Jawaban:

198

Gunakan kode di bawah ini dari Toast kustom. Ini dapat membantu Anda.

toast.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_layout_root"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    android:background="#DAAA" >

    <ImageView android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginRight="10dp" />

    <TextView android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textColor="#FFF" />

</LinearLayout>

MainActivity.java

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 = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

Dan lihat tautan di bawah ini juga untuk Toast khusus.

Toast Kustom dengan Jam Analog

YouTube: Membuat Toast Kustom Dengan Tombol di Android Studio

Dipak Keshariya
sumber
8
"(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
sergey. n
Saya juga tidak tahu tujuan tampilan root (null), tetapi di dokumen resmi juga ada, jika seseorang dapat menjelaskan alasannya, akan sangat bagus! developer.android.com/guide/topics/ui/notifiers/toasts#java
Nestor Perez
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.

Memperbarui:

Telah menulis kelas pembangun untuk menyederhanakan tujuan di atas; Ini tautannya: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc

Cek HowToUse.ktdi link di atas.

Keluaran:

Masukkan deskripsi gambar di sini

TheLittleNaruto
sumber
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:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_toast_layout_id"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF"
    android:orientation="horizontal"
    android:padding="5dp" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:textColor="#000" />

</LinearLayout>

LANGKAH 2: Dalam kode Aktivitas, dapatkan tampilan khusus di atas dan lampirkan ke Toast:

// Get your custom_toast.xml ayout
LayoutInflater inflater = getLayoutInflater();

View layout = inflater.inflate(R.layout.custom_toast,
(ViewGroup) findViewById(R.id.custom_toast_layout_id));

// set a message
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Button is clicked!");

// Toast...
Toast toast = new Toast(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:

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

ρяσѕρєя K
sumber
6

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/toast_layout_root"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="10dp"
            android:background="#DAAA"
>

    <ImageView android:id="@+id/image"
               android:layout_width="wrap_content"
               android:layout_height="fill_parent"
               android:layout_marginRight="10dp"
    />

    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#FFF"
    />
</LinearLayout>

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 = new Toast(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.

Deepak Swami
sumber
4

Tata letak kustom untuk roti panggang, custom_toast.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Custom Toast"
        android:gravity="center"
        android:id="@+id/custom_toast_text"
        android:typeface="serif"
        android:textStyle="bold"
        />
</LinearLayout>

Dan metode Java (cukup berikan pesan roti panggang ke metode ini):

public void toast(String message)
{
    Toast toast = new Toast(context);
    View view = LayoutInflater.from(context).inflate(R.layout.image_custom, null);
    TextView textView = (TextView) view.findViewById(R.id.custom_toast_text);
    textView.setText(message);
    toast.setView(view);
    toast.setGravity(Gravity.BOTTOM|Gravity.CENTER, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.show();
}
Sai Gopi Me
sumber
3

Anda dapat mengunduh kode di sini .

Langkah 1:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns: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=".MainActivity">

    <Button
        android:id="@+id/btnCustomToast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Custom Toast" />
  </RelativeLayout>

Langkah 2:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/custom_toast_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"/>

        <TextView
            android:id="@+id/custom_toast_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="My custom Toast Example Text" />

</LinearLayout>

Langkah 3:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    private Button btnCustomToast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnCustomToast= (Button) findViewById(R.id.btnCustomToast);
        btnCustomToast.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // Find custom toast example layout file
                View layoutValue = LayoutInflater.from(MainActivity.this).inflate(R.layout.android_custom_toast_example, null);
                // Creating the Toast object
                Toast toast = new Toast(getApplicationContext());
                toast.setDuration(Toast.LENGTH_SHORT);

                // gravity, xOffset, yOffset
                toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                toast.setView(layoutValue);//setting the view of custom toast layout
                toast.show();
            }
        });
    }
}
nirav kalola
sumber
2

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/points_layout"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:layout_gravity="center"
    android:gravity="center" >

 <TextView
    android:id="@+id/points_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:layout_margin="15dp"
    android:text="@+string/points_text"
    android:textColor="@color/Green" />

</LinearLayout>

background.xml

<?xml version="1.0" encoding="utf-8"?>
<nine-patch
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:src="@drawable/background_96"
   android:dither="true"/>

background_96 adalah background_96.9.png.

Ini tidak diuji dengan baik, dan petunjuk sangat dihargai :)

ornay Odder
sumber
@PeterMortensen LinearLayout
ornay odder
2

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.

Andrew Kelly
sumber
2

Ini yang saya gunakan

AllMethodsInOne.java

public static Toast displayCustomToast(FragmentActivity mAct, String toastText, String toastLength, String succTypeColor) {

    final Toast toast;

    if (toastLength.equals("short")) {
        toast = Toast.makeText(mAct, toastText, Toast.LENGTH_SHORT);
    } else {
        toast = Toast.makeText(mAct, toastText, Toast.LENGTH_LONG);
    }

    View tView = toast.getView();
    tView.setBackgroundColor(Color.parseColor("#053a4d"));
    TextView mText = (TextView) tView.findViewById(android.R.id.message);

    mText.setTypeface(applyFont(mAct));
    mText.setShadowLayer(0, 0, 0, 0);

    tView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            toast.cancel();
        }
    });
    tView.invalidate();
    if (succTypeColor.equals("red")) {
        mText.setTextColor(Color.parseColor("#debe33"));
        tView.setBackground(mAct.getResources().getDrawable(R.drawable.toast_rounded_red));
        // this is to show error message
    }
    if (succTypeColor.equals("green")) {
        mText.setTextColor(Color.parseColor("#053a4d"));
        tView.setBackground(mAct.getResources().getDrawable(R.drawable.toast_rounded_green));
        // this is to show success message
    }


    return toast;
}

YourFile.java

Saat menelepon, tulis saja di bawah ini.

AllMethodsInOne.displayCustomToast(act, "This is custom toast", "long", "red").show();
Fahim Parkar
sumber
toast_rounded_red ini tidak dapat ditemukan. Dimana kita membuatnya?
goops17
@ goops17: Itu adalah file drawable yang memiliki background merah, warna hijau. Sebagai gantinya Anda dapat memberikan warna latar belakang ...
Fahim Parkar
1

Kode untuk file MainActivity.java.

package com.android_examples.com.toastbackgroundcolorchange;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {

 Button BT;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 BT = (Button)findViewById(R.id.button1);
 BT.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {

 Toast ToastMessage = Toast.makeText(getApplicationContext(),"Change Toast Background color",Toast.LENGTH_SHORT);
 View toastView = ToastMessage.getView();
 toastView.setBackgroundResource(R.layout.toast_background_color);
 ToastMessage.show();

 }
 });
 }
}

Kode untuk file tata letak activity_main.xml.

<RelativeLayout xmlns: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" >

 <Button
 android: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.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

 <stroke
    android:width="3dp"
    android:color="#ffffff" ></stroke>
<padding android:left="20dp" android:top="20dp"
    android:right="20dp" android:bottom="20dp" />
<corners android:radius="10dp" />
<gradient android:startColor="#ff000f"
    android:endColor="#ff0000"
    android:angle="-90"/>

</shape>
Waruna Manjula
sumber
1

// Kelas roti panggang khusus tempat Anda dapat menampilkan roti panggang khusus atau default sesuai keinginan)

public class ToastMessage {
    private Context context;
    private static ToastMessage instance;

    /**
     * @param context
     */
    private ToastMessage(Context context) {
        this.context = context;
    }

    /**
     * @param context
     * @return
     */
    public synchronized static ToastMessage getInstance(Context context) {
        if (instance == null) {
            instance = new ToastMessage(context);
        }
        return instance;
    }

    /**
     * @param message
     */
    public void showLongMessage(String message) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

    /**
     * @param message
     */
    public void showSmallMessage(String message) {
        Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }

    /**
     * The Toast displayed via this method will display it for short period of time
     *
     * @param message
     */
    public void showLongCustomToast(String message) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast));
        TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg);
        msgTv.setText(message);
        Toast toast = new Toast(context);
        toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);
        toast.show();


    }

    /**
     * The toast displayed by this class will display it for long period of time
     *
     * @param message
     */
    public void showSmallCustomToast(String message) {

        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast));
        TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg);
        msgTv.setText(message);
        Toast toast = new Toast(context);
        toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(layout);
        toast.show();
    }

}
Amardeep
sumber
1

Cara Sederhana untuk Menyesuaikan Toast,

private void MsgDisplay(String Msg, int Size, int Grav){
    Toast toast = Toast.makeText(this, Msg, Toast.LENGTH_LONG);
    TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
    v.setTextColor(Color.rgb(241, 196, 15));
    v.setTextSize(Size);
    v.setGravity(Gravity.CENTER);
    v.setShadowLayer(1.5f, -1, 1, Color.BLACK);
    if(Grav == 1){
        toast.setGravity(Gravity.BOTTOM, 0, 120);
    }else{
        toast.setGravity(Gravity.BOTTOM, 0, 10);
    }
    toast.show();
}
Chathura
sumber
1

Untuk semua Pengguna Kotlin

Anda dapat membuat Ekstensi seperti berikut:

fun FragmentActivity.showCustomToast(message : String,color : Int) {
 val toastView = findViewById<TextView>(R.id.toast_view)
 toastView.text = message
 toastView.visibility = View.VISIBLE
 toastView.setBackgroundColor(color)

 // create a daemon thread
 val timer = Timer("schedule", true)

 // schedule a single event
 timer.schedule(2000) {
    runOnUiThread { toastView.visibility = View.GONE }
 }
}
Lukas
sumber
1

Sangat mudah untuk membuat kebiasaan kita sendiri Toast.

Ikuti saja langkah-langkah di bawah ini.

Langkah 1

Buat tata letak kustom yang Anda inginkan

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/black"
    android:orientation="vertical"
    android:padding="@dimen/size_10dp"
    app:cardCornerRadius="@dimen/size_8dp"
    app:cardElevation="@dimen/size_8dp">

    <TextView
        android:id="@+id/txt_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="@dimen/size_12dp"
        android:textAlignment="center"
        android:textColor="@color/white"
        android:textSize="@dimen/text_size_16sp"
        tools:text="Hello Test!!" />

</androidx.cardview.widget.CardView>

Langkah 2

Sekarang buat kelas kustom yang diperluas dengan Toast.

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.shop.shoppinggare.R;

import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Text;

public class CustomToast extends Toast {
    private Context context;
    private String message;

    public CustomToast(Context context, String message) {
        super(context);
        this.context = context;
        this.message = message;
        View view = LayoutInflater.from(context).inflate(R.layout.toast_custom, null);
        TextView txtMsg = view.findViewById(R.id.txt_message);
        txtMsg.setText(StringUtils.capitalize(message));
        setView(view);
        setDuration(Toast.LENGTH_LONG);

    }


}

Kami telah membuat roti panggang khusus.

Langkah-3

Sekarang, akhirnya, bagaimana kita bisa menggunakannya.

new CustomToast(contex,"message").show();

Nikmati!!

Deepak gupta
sumber
0

Perhatian, Pembaruan untuk bersulang di Android 11

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

Anoop M
sumber
0

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

Gk Mohammad Emon
sumber
-1
val inflater = layoutInflater
val container: ViewGroup = findViewById(R.id.custom_toast_container)
val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
val text: TextView = layout.findViewById(R.id.text)
text.text = "This is a custom toast"
with (Toast(applicationContext)) {
    setGravity(Gravity.CENTER_VERTICAL, 0, 0)
    duration = Toast.LENGTH_LONG
    view = layout
    show()
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/custom_toast_container"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="8dp"
              android:background="#DAAA"
              >
    <ImageView android:src="@drawable/droid"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginRight="8dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textColor="#FFF"
              />
</LinearLayout>

Referensi: https://developer.android.com/guide/topics/ui/notifiers/toasts

Ajay Prajapati
sumber