Brindisi personalizzato su Android: un semplice esempio


117

Sono nuovo nella programmazione Android. Qual è un semplice esempio che mostra una notifica di tipo avviso popup personalizzato su Android?


cosa intendi per toast personalizzato? cosa stai cercando di mostrare?
thepoosh

Questa non è una vera domanda. Dovresti provare a leggere i documenti su developer.android
adatapost

Ho una finestra di messaggio personalizzata. Se puoi personalizzarlo e aggiungerci un timer e modificarne l'aspetto, lo posto per te. Puoi?
Bobs

1
Qui potete trovare un esempio di base di "Custom Toast" stackoverflow.com/questions/3500197/...
Jorgesys

Risposte:


198

Utilizza il codice riportato di seguito di un avviso popup personalizzato. Potrebbe aiutarti.

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

E controlla i link sottostanti anche per un Brindisi personalizzato.

Brindisi personalizzato con orologio analogico

YouTube: creazione di toast personalizzato con pulsante in Android Studio


8
"(ViewGroup) findViewById (R.id.toast_layout_root)" può essere sostituito con "null". Perché la tua attività non contiene toast_layout quindi sarà comunque sempre nulla.
stevo.mit

2
Il mio avviso popup personalizzato non veniva visualizzato perché stavo utilizzando il nuovo layout di vincolo come rootview del mio avviso popup personalizzato. Dopo essere passato al layout lineare, tutto ha funzionato perfettamente. Quindi attenzione ...
Charles Woodson

davvero qualcuno potrebbe spiegare lo scopo di findViewById (R.id.toast_layout_root)? sarà comunque nullo e funziona perfettamente bene con il solo passaggio di null
sergey.n

Inoltre non conosco lo scopo della vista root (null), ma anche nella documentazione ufficiale è presente, se qualcuno può spiegare perché, sarebbe fantastico! developer.android.com/guide/topics/ui/notifiers/toasts#java
Nestor Perez

usalo se il crash di findViewById è nullo: Visualizza layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee

38

Un brindisi serve per mostrare i messaggi per brevi intervalli di tempo; Quindi, secondo la mia comprensione, vorresti personalizzarlo aggiungendo un'immagine e cambiando le dimensioni e il colore del testo del messaggio. Se questo è tutto ciò che vuoi fare, non è necessario creare un layout separato e gonfiarlo nell'istanza di Toast.

La visualizzazione predefinita di Toast contiene una TextViewper mostrare i messaggi su di essa. Quindi, se abbiamo il riferimento dell'ID risorsa di quello TextView, possiamo giocarci. Quindi di seguito è cosa puoi fare per ottenere questo:

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

Nel codice sopra puoi vedere, puoi aggiungere un'immagine a TextView tramite setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)qualsiasi posizione relativa a TextView che desideri.

Aggiornare:

Ho scritto una classe di builder per semplificare lo scopo di cui sopra; Ecco il link: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc

Controlla il HowToUse.ktlink sopra.

Produzione:

Inserisci qui la descrizione dell'immagine


Ci sono molte meno possibilità di questo, ma comunque, penso che TextViewdovrebbe esserci un controllo per quello , solo per essere sicuri e per un controllo, intendo un controllo nullo o un controllo del tipo. Per ogni evenienza, Google decide di cambiare l'ID o la vista per mostrare il testo nella classe Toast. Comunque ... +1
DroidDev

1
Vero! Ma se verrà modificato, non sarai comunque in grado di accedere all'ID risorsa a causa della sua non esistenza. Ma anche se per essere al sicuro, un controllo NULL ti renderebbe la vita facile. @DroidDev grazie per il suggerimento :)
TheLittleNaruto

16

PASSO 1:

Per prima cosa crea un layout per un brindisi personalizzato in 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>

PASSAGGIO 2: Nel codice dell'attività, ottieni la visualizzazione personalizzata sopra e allegala a 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();

Per ulteriori informazioni, vedere come creiamo un avviso popup personalizzato in Android:

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


6

Vedi link qui . Tu trovi la tua soluzione. E prova:

Creazione di una visualizzazione Brindisi personalizzata

Se un semplice messaggio di testo non è sufficiente, puoi creare un layout personalizzato per la tua notifica di avviso popup. Per creare un layout personalizzato, definire un layout View, in XML o nel codice dell'applicazione, e passare l'oggetto View radice al metodo setView (View).

Ad esempio, puoi creare il layout per il brindisi visibile nello screenshot a destra con il seguente XML (salvato come 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>

Notare che l'ID dell'elemento LinearLayout è "toast_layout". È necessario utilizzare questo ID per aumentare il layout dall'XML, come mostrato di seguito:

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

Per prima cosa, recupera LayoutInflater con getLayoutInflater () (o getSystemService ()), quindi gonfia il layout da XML utilizzando inflate (int, ViewGroup). Il primo parametro è l'ID della risorsa di layout e il secondo è la vista principale. È possibile utilizzare questo layout gonfiato per trovare più oggetti View nel layout, quindi ora acquisisci e definisci il contenuto per gli elementi ImageView e TextView. Infine, crea un nuovo Toast con Toast (Context) e imposta alcune proprietà del toast, come la gravità e la durata. Quindi chiama setView (View) e passagli il layout gonfiato. È ora possibile visualizzare l'avviso popup con il layout personalizzato chiamando show ().

Nota: non utilizzare il costruttore pubblico per un Toast a meno che non si definisca il layout con setView (View). Se non si dispone di un layout personalizzato da utilizzare, è necessario utilizzare makeText (Context, int, int) per creare il Toast.


4

Layout personalizzato per toast, 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>

E il metodo Java (basta passare il messaggio di avviso a questo metodo):

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

3

Puoi scaricare il codice qui .

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

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

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

2

Penso che la maggior parte degli esempi xml di customtoast in Internet si basino sulla stessa fonte.

La documentazione di Android, che è molto obsoleta a mio parere. fill_parent non dovrebbe più essere utilizzato. Preferisco usare wrap_content in combinazione con un xml.9.png. In questo modo puoi definire la dimensione minima di toastbackground per tutta la dimensione dell'origine fornita.

Se sono richiesti toast più complessi, è necessario utilizzare frame o layout relativo invece di 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 è background_96.9.png.

Questo non è testato molto bene e i suggerimenti sono apprezzati :)


@PeterMortensen LinearLayout
odder odder

2

Per evitare problemi con i parametri layout_ * non utilizzati correttamente, è necessario assicurarsi che quando si gonfia il layout personalizzato si specifichi un ViewGroup corretto come genitore.

Molti esempi passano null qui, ma invece puoi passare il Toast ViewGroup esistente come genitore.

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

Qui sostituiamo la visualizzazione Toast esistente con la nostra visualizzazione personalizzata. Una volta che hai un riferimento al tuo "layout" di layout, puoi aggiornare qualsiasi immagine / visualizzazione di testo che potrebbe contenere.

Questa soluzione impedisce anche a qualsiasi arresto anomalo di "Vista non collegata al gestore di finestre" di utilizzare null come genitore.

Inoltre, evita di usare ConstraintLayout come root del layout personalizzato, sembra che non funzioni se usato all'interno di un Toast.


2

Questo è quello che ho usato

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

Durante la chiamata basta scrivere di seguito.

AllMethodsInOne.displayCustomToast(act, "This is custom toast", "long", "red").show();

toast_rounded_red questo non può essere trovato. Dove lo creiamo?
goops17

@ goops17: Questo è un file disegnabile con sfondo rosso e verde. Invece puoi dare il colore di sfondo ...
Fahim Parkar

1

Codice per il 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();

 }
 });
 }
}

Codice per il file di layout 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>

Codice per il file di layout toast_background_color.xml creato nella cartella 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>

1

// Una classe di avviso popup personalizzato in cui è possibile mostrare un avviso popup personalizzato o predefinito come desiderato)

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

}

1

Modo semplice per personalizzare il 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();
}

1

Per tutti gli utenti Kotlin

Puoi creare un'estensione come segue:

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

1

È molto semplice creare la nostra personalizzazione Toast.

Segui i passaggi seguenti.

Passo 1

Crea il layout personalizzato che desideri

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

Passo 2

Ora crea la classe personalizzata che si estende con 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);

    }


}

Abbiamo creato il toast personalizzato.

Step-3

Ora, finalmente, come possiamo usarlo.

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

Godere!!


0

Avviso, aggiornamenti ai toast in Android 11

Gli avvisi popup personalizzati in background vengono bloccati, Android 11 protegge gli utenti deprecando le visualizzazioni degli avvisi popup personalizzati. Per motivi di sicurezza e per mantenere una buona esperienza utente, il sistema blocca i messaggi di avviso che contengono visualizzazioni personalizzate se tali avvisi vengono inviati dallo sfondo da un'app destinata ad Android 11.

Metodo addCallback () aggiunto in Android R Se desideri ricevere una notifica quando un avviso popup (di testo o personalizzato) appare o scompare.

Il testo più importante nell'API di toast cambia che per le app che prendono di mira Android 11 il getView()metodo restituisce null quando vi si accede, quindi assicurati di proteggere le tue app da ECCEZIONI FATALI, sai cosa intendo :)


0

Utilizzando questa libreria denominata Toasty, penso che tu abbia abbastanza flessibilità per creare un avviso popup personalizzato con il seguente approccio:

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

Puoi anche passare il testo formattato a Toasty e qui c'è lo snippet di codice


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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.