Niestandardowe tosty na Androida: prosty przykład

117

Jestem nowy w programowaniu na Androida. Jaki jest prosty przykład pokazujący niestandardowe powiadomienie toast na Androida?

Piaszczysty
źródło
co masz na myśli przez toast niestandardowy? co próbujesz pokazać
thepoosh
To nie jest prawdziwe pytanie. Powinieneś spróbować czytać dokumenty na developer.android
adatapost
Mam niestandardowe okno wiadomości. Jeśli możesz go dostosować i dodać do niego licznik czasu i zmienić jego wygląd, opublikuję go za Ciebie. Czy możesz?
Bobs
1
Tutaj można znaleźć podstawowy przykład „Niestandardowego
tostu

Odpowiedzi:

198

Użyj poniższego kodu niestandardowego Toastu. To może ci pomóc.

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();

Sprawdź również poniższe linki, aby uzyskać niestandardowy Toast.

Niestandardowe tosty z zegarem analogowym

YouTube: Tworzenie niestandardowego tosta za pomocą przycisku w Android Studio

Dipak Keshariya
źródło
8
„(ViewGroup) findViewById (R.id.toast_layout_root)” można zastąpić wartością „null”. Ponieważ twoja aktywność nie zawiera toast_layout, więc i tak zawsze będzie zerowa.
stevo.mit
2
Mój niestandardowy toast nie pojawił się, ponieważ używałem nowego układu ograniczeń jako widoku głównego mojego niestandardowego toastu. Kiedy przeszedłem na układ liniowy, wszystko działało idealnie. Więc ostrzegam ...
Charles Woodson
naprawdę ktoś mógłby wyjaśnić cel findViewById (R.id.toast_layout_root)? i tak będzie zerowe i działa doskonale po prostu podając wartość null
sergey.n
Nie znam również celu widoku głównego (null), ale w oficjalnych dokumentach jest również obecny, jeśli ktoś może wyjaśnić dlaczego, byłoby świetnie! developer.android.com/guide/topics/ui/notifiers/toasts#java
Nestor Perez
użyj tego, jeśli ulegniesz awarii, ponieważ findViewById ma wartość null: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee
38

Toast jest za wyświetlanie wiadomości w krótkich odstępach czasu; Tak więc, zgodnie z moim rozumieniem, chciałbyś go dostosować, dodając do niego obraz i zmieniając rozmiar, kolor tekstu wiadomości. Jeśli to wszystko, co chcesz zrobić, nie ma potrzeby tworzenia osobnego układu i nadmuchiwania go do instancji Toast.

Domyślny widok Toast zawiera TextViewikonę do wyświetlania wiadomości. Tak więc, jeśli mamy odniesienie do identyfikatora zasobu TextView, możemy się tym bawić. Oto co możesz zrobić, aby to osiągnąć:

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();

W powyższym kodzie możesz zobaczyć, możesz dodać obraz do TextView poprzez setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)dowolną pozycję względem TextView, którą chcesz.

Aktualizacja:

Napisali klasę budowniczego, aby uprościć powyższy cel; Oto link: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc

Sprawdź HowToUse.ktpowyższy link.

Wynik:

Tutaj wprowadź opis obrazu

TheLittleNaruto
źródło
Jest na to znacznie mniej szans, ale mimo to myślę, że TextViewpowinien tam być czek, żeby był bezpieczny i przez czek, mam na myśli czek zerowy lub czek typu. Na wszelki wypadek Google postanawia zmienić identyfikator lub widok wyświetlania tekstu w klasie Toast. W każdym razie ... +1
DroidDev
1
Prawdziwe! Ale jeśli zostanie zmieniony, i tak nie będziesz mieć dostępu do identyfikatora zasobu, ponieważ nie istnieje. Ale nawet jeśli jesteś po bezpiecznej stronie, czek NULL ułatwi ci życie. @DroidDev dzięki za sugestię :)
TheLittleNaruto
16

KROK 1:

Najpierw utwórz układ niestandardowego toastu w 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>

KROK 2: W kodzie aktywności pobierz powyższy widok niestandardowy i dołącz do 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();

Aby uzyskać więcej pomocy, zobacz, jak tworzymy niestandardowy Toast w systemie Android:

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

ρяσѕρєя K
źródło
6

Zobacz link tutaj . Znajdziesz swoje rozwiązanie. I próbuj:

Tworzenie niestandardowego widoku toast

Jeśli zwykła wiadomość tekstowa nie wystarczy, możesz utworzyć niestandardowy układ powiadomienia wyskakującego. Aby utworzyć układ niestandardowy, zdefiniuj układ widoku w formacie XML lub w kodzie aplikacji i przekaż główny obiekt View do metody setView (View).

Na przykład możesz utworzyć układ tostu widoczny na zrzucie ekranu po prawej stronie za pomocą następującego kodu XML (zapisanego jako 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>

Zwróć uwagę, że identyfikator elementu LinearLayout to „toast_layout”. Musisz użyć tego identyfikatora, aby nadmuchać układ z XML, jak pokazano tutaj:

 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();

Najpierw pobierz LayoutInflater za pomocą metody getLayoutInflater () (lub getSystemService ()), a następnie wypełnij układ z XML za pomocą inflate (int, ViewGroup). Pierwszy parametr to identyfikator zasobu układu, a drugi to widok główny. Możesz użyć tego zawyżonego układu, aby znaleźć więcej obiektów View w układzie, więc teraz przechwyć i zdefiniuj zawartość dla elementów ImageView i TextView. Na koniec utwórz nowy Toast z Toast (Kontekst) i ustaw niektóre właściwości toastu, takie jak grawitacja i czas trwania. Następnie wywołaj setView (View) i przekaż mu zawyżony układ. Możesz teraz wyświetlić toast z własnym układem, wywołując funkcję show ().

Uwaga: nie używaj publicznego konstruktora dla Toast, chyba że zamierzasz zdefiniować układ za pomocą setView (View). Jeśli nie masz niestandardowego układu do użycia, musisz użyć makeText (Context, int, int), aby utworzyć Toast.

Deepak Swami
źródło
4

Układ niestandardowy na grzanki, 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>

I metoda Java (po prostu przekaż wiadomość toast do tej metody):

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
źródło
3

Możesz pobrać kod tutaj .

Krok 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>

Krok 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>

Krok 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
źródło
2

Myślę, że większość przykładów XML Customtoast w Internecie jest opartych na tym samym źródle.

Dokumentacja Androida, która jest moim zdaniem bardzo nieaktualna. Nie należy już używać funkcji fill_parent. Wolę używać wrap_content w połączeniu z xml.9.png. W ten sposób możesz zdefiniować minimalny rozmiar toastbackground w całym rozmiarze podanego źródła.

Jeśli wymagane są bardziej złożone tosty, zamiast LL należy zastosować układ ramkowy lub względny.

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 to background_96.9.png.

Nie jest to zbyt dobrze przetestowane, a wskazówki są mile widziane :)

ornay dziwniejsze
źródło
@PeterMortensen LinearLayout
ornay odder
2

Aby uniknąć problemów z nieprawidłowym użyciem parametrów layout_ *, musisz upewnić się, że podczas wypełniania niestandardowego układu określasz poprawną ViewGroup jako element nadrzędny.

Wiele przykładów przekazuje tutaj wartość null, ale zamiast tego możesz przekazać istniejącą Toast ViewGroup jako swojego rodzica.

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

Tutaj zastępujemy istniejący widok Toast naszym widokiem niestandardowym. Po uzyskaniu odniesienia do „układu” układu można zaktualizować wszelkie obrazy / widoki tekstu, które może on zawierać.

To rozwiązanie zapobiega również awariom typu „Widok niepołączony do menedżera okien” używania wartości null jako elementu nadrzędnego.

Unikaj również używania ConstraintLayout jako katalogu głównego układu niestandardowego, wydaje się, że nie działa, gdy jest używany wewnątrz Toast.

Andrew Kelly
źródło
2

To jest to, czego użyłem

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

Dzwoniąc po prostu napisz poniżej.

AllMethodsInOne.displayCustomToast(act, "This is custom toast", "long", "red").show();
Fahim Parkar
źródło
toast_rounded_red tego nie można znaleźć. Gdzie to tworzymy?
goops17
@ goops17: To jest plik do rysowania, który ma tło w kolorze czerwonym i zielonym. Zamiast tego możesz nadać kolor tła ...
Fahim Parkar
1

Kod pliku 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();

 }
 });
 }
}

Kod pliku układu 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>

Kod pliku układu toast_background_color.xml utworzonego w folderze 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
źródło
1

// Niestandardowa klasa tostów, w której możesz wyświetlać tosty niestandardowe lub domyślne zgodnie z potrzebami

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
źródło
1

Prosty sposób na dostosowanie tosta,

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
źródło
1

Dla wszystkich użytkowników Kotlin

Możesz utworzyć rozszerzenie, takie jak:

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
źródło
1

Stworzenie własnego projektu jest bardzo proste Toast.

Po prostu wykonaj poniższe czynności.

Krok 1

Utwórz układ niestandardowy, który chcesz

<?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>

Krok 2

Teraz utwórz niestandardową klasę, która rozszerza 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);

    }


}

Stworzyliśmy niestandardowy tost.

Krok 3

Teraz wreszcie, jak możemy z tego skorzystać.

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

Cieszyć się!!

Deepak gupta
źródło
0

Uwaga, aktualizacje toastów w systemie Android 11

Niestandardowe tosty z tła są blokowane, system Android 11 chroni użytkowników, wycofując niestandardowe widoki toastów. Ze względów bezpieczeństwa i w celu zapewnienia dobrego wrażenia użytkownika system blokuje tosty zawierające niestandardowe widoki, jeśli te tosty są wysyłane z tła przez aplikację przeznaczoną dla systemu Android 11.

addCallback () metoda dodana w systemie Android R Jeśli chcesz być powiadamiany o pojawieniu się lub zniknięciu toastu (tekstowego lub niestandardowego).

Najważniejszy tekst w tosty zmian API że dla aplikacji na Androida 11 to getView()wraca metoda wartość null, gdy do niego dostęp, więc zapewnić, aby chronić swoje aplikacje z krytyczny wyjątek, wiesz o co mi chodzi :)

Anoop M.
źródło
0

Korzystając z tej biblioteki o nazwie Toasty , myślę, że masz wystarczającą elastyczność, aby przygotować niestandardowy toast w następujący sposób -

Toasty.custom(yourContext, "I'm a custom Toast", yourIconDrawable, tintColor, duration, withIcon, 
shouldTint).show();

Możesz również przekazać sformatowany tekst do Toasty, a oto fragment kodu

Gk Mohammad Emon
źródło
-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>

Źródła: https://developer.android.com/guide/topics/ui/notifiers/toasts

Ajay Prajapati
źródło