Brindis personalizado en Android: un ejemplo sencillo


117

Soy nuevo en la programación de Android. ¿Qué es un ejemplo simple que muestra una notificación de brindis personalizada en Android?


¿A qué te refieres con tostadas personalizadas? que estas tratando de mostrar
thepoosh

Ésta no es una pregunta real. Debería intentar leer documentos en developer.android
adatapost

Tengo un cuadro de mensaje personalizado. Si puede personalizarlo y agregarle un temporizador y cambiar su apariencia, lo publico para usted. ¿Puedes?
Bobs

1
Aquí puede encontrar un ejemplo básico de "Brindis personalizado" stackoverflow.com/questions/3500197/…
Jorgesys

Respuestas:


198

Utilice el siguiente código de un brindis personalizado. Puede que te ayude.

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

Y consulte los enlaces a continuación también para obtener un brindis personalizado.

Brindis personalizado con reloj analógico

YouTube: Creación de un brindis personalizado con botón en Android Studio


8
"(ViewGroup) findViewById (R.id.toast_layout_root)" se puede reemplazar por "null". Debido a que su actividad no contiene toast_layout, siempre será nulo de todos modos.
stevo.mit

2
Mi tostada personalizada no aparecía porque estaba usando el nuevo Diseño de restricción como vista raíz de mi tostada personalizada. Una vez que cambié a Diseño lineal, todo funcionó perfectamente. Así que ten cuidado ...
Charles Woodson

¿realmente alguien podría explicar el propósito de findViewById (R.id.toast_layout_root)? será nulo de todos modos, y funciona perfectamente bien con solo pasar nulo
sergey.n

Tampoco sé el propósito de la vista raíz (nulo), pero en los documentos oficiales también está presente, si alguien puede explicar por qué, ¡sería genial! developer.android.com/guide/topics/ui/notifiers/toasts#java
Nestor Perez

use esto si falla por findViewById es nulo: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee

38

Un brindis es para mostrar mensajes durante breves intervalos de tiempo; Entonces, según tengo entendido, le gustaría personalizarlo agregando una imagen y cambiando el tamaño y el color del texto del mensaje. Si eso es todo lo que desea hacer, entonces no es necesario hacer un diseño separado e inflarlo a la instancia de Toast.

La vista predeterminada de Toast contiene un TextViewmensaje para mostrar mensajes. Entonces, si tenemos la referencia de id de recurso de eso TextView, podemos jugar con él. Entonces, a continuación, se muestra lo que puede hacer para lograr esto:

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

En el código anterior que puede ver, puede agregar una imagen a TextView a través de setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)cualquier posición relativa a TextView que desee.

Actualizar:

Haber escrito una clase de constructor para simplificar el propósito anterior; Aquí está el enlace: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc

Consulte el HowToUse.ktenlace de arriba.

Salida:

Ingrese la descripción de la imagen aquí


Hay muchas menos posibilidades de que esto suceda, pero aún así, creo que TextViewdebería haber un cheque para eso , solo para estar seguro y por un cheque, me refiero a un cheque nulo o un cheque de tipo. Por si acaso, Google decide cambiar la identificación o la vista para mostrar texto en la clase Toast. De todos modos ... +1
DroidDev

1
¡Cierto! Pero si se cambia, no podrá acceder a la identificación del recurso de todos modos debido a que no existe. Pero a pesar de que para estar seguro, un cheque NULO le facilitaría la vida. @DroidDev gracias por la sugerencia :)
TheLittleNaruto

16

PASO 1:

Primero cree un diseño para un brindis personalizado en 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>

PASO 2: En el código de actividad, obtenga la vista personalizada anterior y adjúntela 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();

Para obtener más ayuda, vea cómo creamos Toast personalizado en Android:

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


6

Ver enlace aquí . Encuentra tu solución. Y prueba:

Creación de una vista de brindis personalizada

Si un simple mensaje de texto no es suficiente, puede crear un diseño personalizado para su notificación de brindis. Para crear un diseño personalizado, defina un diseño de Vista, en XML o en el código de su aplicación, y pase el objeto Ver raíz al método setView (Vista).

Por ejemplo, puede crear el diseño para el brindis visible en la captura de pantalla a la derecha con el siguiente XML (guardado como 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>

Tenga en cuenta que el ID del elemento LinearLayout es "toast_layout". Debe usar este ID para inflar el diseño del XML, como se muestra aquí:

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

Primero, recupere LayoutInflater con getLayoutInflater () (o getSystemService ()), y luego infle el diseño de XML usando inflate (int, ViewGroup). El primer parámetro es el ID del recurso de diseño y el segundo es la vista raíz. Puede usar este diseño inflado para encontrar más objetos View en el diseño, así que ahora capture y defina el contenido de los elementos ImageView y TextView. Finalmente, cree un nuevo brindis con tostado (contexto) y establezca algunas propiedades del brindis, como la gravedad y la duración. Luego llame a setView (View) y páselo al diseño inflado. Ahora puede mostrar el brindis con su diseño personalizado llamando a show ().

Nota: No utilice el constructor público para un Toast a menos que vaya a definir el diseño con setView (Ver). Si no tiene un diseño personalizado para usar, debe usar makeText (Context, int, int) para crear el Toast.


4

Diseño personalizado para la tostada, 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>

Y el método Java (simplemente pase el mensaje tostado a este método):

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

Puede descargar el código aquí .

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

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

Paso 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

Creo que la mayoría de los ejemplos xml de customtoast en Internet se basan en la misma fuente.

La documentación de Android, que en mi opinión está muy desactualizada. fill_parent no debería usarse más. Prefiero usar wrap_content en combinación con un xml.9.png. De esa forma, puede definir el tamaño mínimo de toastbackground en todo el tamaño de la fuente proporcionada.

Si se requieren tostadas más complejas, se debe usar un marco o un diseño relativo en lugar de 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 es background_96.9.png.

Esto no se prueba muy bien y se agradecen las sugerencias :)


@PeterMortensen LinearLayout
ornay odder

2

Para evitar problemas con los parámetros de layout_ * que no se utilizan correctamente, debe asegurarse de que, cuando infle su diseño personalizado, especifique un ViewGroup correcto como padre.

Muchos ejemplos pasan nulos aquí, pero en su lugar puede pasar el Toast ViewGroup existente como su padre.

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

Aquí reemplazamos la vista Toast existente con nuestra vista personalizada. Una vez que tenga una referencia al "diseño" de su diseño, puede actualizar cualquier vista de imágenes / texto que pueda contener.

Esta solución también evita que cualquier "Vista no adjunta al administrador de ventanas" se bloquee al usar null como padre.

Además, evite usar ConstraintLayout como su raíz de diseño personalizado, esto parece no funcionar cuando se usa dentro de un Toast.


2

Esto es lo que usé

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

Mientras llama, escriba a continuación.

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

toast_unded_red esto no se puede encontrar. ¿Dónde lo creamos?
goops17

@ goops17: Ese es un archivo dibujable que tiene un fondo de color rojo, verde. En su lugar, puede dar color de fondo ...
Fahim Parkar

1

Código para el archivo 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();

 }
 });
 }
}

Código para el archivo de diseño 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>

Código para el archivo de diseño toast_background_color.xml creado en la carpeta 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 clase de tostadas personalizadas donde puede mostrar tostadas personalizadas o predeterminadas según lo desee)

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

Manera sencilla de personalizar el brindis,

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

Para todos los usuarios de Kotlin

Puede crear una extensión como la siguiente:

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

Es muy sencillo crear nuestra propia costumbre Toast .

Simplemente siga los pasos a continuación.

Paso 1

Cree el diseño personalizado que desee

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

Paso 2

Ahora cree la clase personalizada que se extiende 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);

    }


}

Hemos creado el brindis personalizado.

Paso 3

Ahora, finalmente, ¿cómo podemos usarlo?

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

¡¡Disfrutar!!


0

Atención, actualizaciones de brindis en Android 11

Los brindis personalizados en segundo plano están bloqueados, Android 11 protege a los usuarios al desaprobar las vistas de brindis personalizadas. Por razones de seguridad y para mantener una buena experiencia de usuario, el sistema bloquea los avisos que contienen vistas personalizadas si esos avisos son enviados desde el fondo por una aplicación que tiene como objetivo Android 11.

Método addCallback () agregado en Android R Si desea que se le notifique cuando un brindis (texto o personalizado) aparece o desaparece.

El texto más importante en la API de tostadas cambia que para las aplicaciones que tienen como objetivo Android 11, el getView()método devuelve nulo cuando accedes a él, así que asegúrate de proteger tus aplicaciones de FATAL EXCEPTION, ya sabes a qué me refiero :)


0

Al usar esta biblioteca llamada Toasty , creo que tiene suficiente flexibilidad para hacer un brindis personalizado con el siguiente enfoque:

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

También puede pasar texto formateado a Toasty y aquí está el fragmento de código


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.