Benutzerdefinierte Toast auf Android: Ein einfaches Beispiel

Ich bin neu in der Android-Programmierung. Was ist ein einfaches Beispiel für eine benutzerdefinierte Toast-Benachrichtigung auf Android?

   

    Verwenden Sie den folgenden Code eines benutzerdefinierten Toasts. Es kann dir helfen.

    toast.xml

        

    Hauptaktivität.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(); 

    Und schau dir die untenstehenden Links auch für einen benutzerdefinierten Toast an.

    Kundenspezifischer Toast mit analoger Uhr

    YouTube: Erstellen eines benutzerdefinierten Toasts mit der Schaltfläche in Android Studio

    Ein Toast dient zum Anzeigen von Nachrichten für kurze Zeitintervalle; Also, nach meinem Verständnis, möchten Sie es anpassen, indem Sie ein Bild hinzufügen und Größe, Farbe des Nachrichtentextes ändern. Wenn das alles ist, was Sie tun möchten, müssen Sie kein separates Layout erstellen und es zur Toast-Instanz aufblasen.

    Die Standardansicht von Toast enthält eine TextView zum TextView von Nachrichten. Wenn wir also die Ressourcen-ID-Referenz dieser TextView , können wir damit spielen. Was können Sie tun, um dies zu erreichen?

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

    In obigem Code können Sie sehen, dass Sie TextView über setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) hinzufügen setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) , unabhängig davon, welche Position relativ zu TextView Sie haben möchten.

    Ausgabe:

    Geben Sie eine Bildbeschreibung hier ein

    SCHRITT 1:

    Erstellen Sie zuerst ein Layout für einen benutzerdefinierten Toast in res/layout/custom_toast.xml :

     < ?xml version="1.0" encoding="utf-8"?>    

    SCHRITT 2: Im Aktivitätscode die obige benutzerdefinierte Ansicht abrufen und an Toast anhängen:

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

    Weitere Informationen finden Sie unter Erstellen von benutzerdefiniertem Toast in Android:

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

    Siehe Link hier . Du findest deine Lösung. Und versuche:

    Erstellen einer benutzerdefinierten Toast-Ansicht

    Wenn eine einfache Textnachricht nicht ausreicht, können Sie ein benutzerdefiniertes Layout für Ihre Toastbenachrichtigung erstellen. Um ein benutzerdefiniertes Layout zu erstellen, definieren Sie ein Ansichtslayout in XML oder in Ihrem Anwendungscode und übergeben das root-View-Objekt an die Methode setView (View).

    Beispielsweise können Sie das Layout für den Toast, der im Screenshot rechts zu sehen ist, mit dem folgenden XML-Code erstellen (gespeichert als toast_layout.xml):

         

    Beachten Sie, dass die ID des LinearLayout-Elements “toast_layout” ist. Sie müssen diese ID verwenden, um das Layout aus dem XML-Code aufzublähen, wie hier gezeigt:

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

    Rufen Sie zuerst das LayoutInFlater mit getLayoutInFlater () (oder getSystemService ()) ab und blenden Sie dann das Layout mithilfe von inflate (int, ViewGroup) aus dem XML-Format auf. Der erste Parameter ist die Layout-Ressourcen-ID und der zweite Parameter ist die Stammansicht. Sie können dieses überhöhte Layout verwenden, um mehr View-Objekte im Layout zu finden. Erfassen und definieren Sie jetzt den Inhalt für die ImageView- und TextView-Elemente. Erstellen Sie schließlich einen neuen Toast mit Toast (Kontext) und legen Sie einige Eigenschaften des Toasts fest, z. B. die Schwerkraft und die Dauer. Rufen Sie dann setView (View) auf und übergeben Sie das überhöhte Layout. Sie können den Toast jetzt mit Ihrem benutzerdefinierten Layout anzeigen, indem Sie show () aufrufen.

    Hinweis: Verwenden Sie den öffentlichen Konstruktor nicht für einen Toast, es sei denn, Sie definieren das Layout mit setView (View). Wenn Sie kein benutzerdefiniertes Layout verwenden müssen, müssen Sie makeText (Context, int, int) verwenden, um den Toast zu erstellen.

    Das habe ich benutzt

    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, tText, Toast.LENGTH_SHORT); } else { toast = Toast.makeText(mAct, tText, 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

    Während des Anrufs schreibe einfach unten.

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

    Ich denke, die meisten customtoast xml-Beispiele im Internet basieren auf der gleichen Quelle.

    Die Android-Dokumentation, die meiner Meinung nach sehr veraltet ist. fill_parent sollte nicht mehr verwendet werden. Ich bevorzuge die Verwendung von wrap_content in Kombination mit einem xml.9.png. Auf diese Weise können Sie die Mindestgröße von Toastbackground über die gesamte Größe der bereitgestellten Quelle definieren.

    Wenn komplexere Toasts benötigt werden, sollte Frame oder relatives Layout anstelle von LL verwendet werden.

    toast.xml

     < ?xml version="1.0" encoding="utf-8"?>    

    Hintergrund.xml

     < ?xml version="1.0" encoding="utf-8"?>  

    background_96 ist background_96.9.png.

    Dies wird nicht sehr gut getestet, und Hinweise werden geschätzt 🙂

    Sie können den Code hier herunterladen.

    Schritt 1:

     < ?xml version="1.0" encoding="utf-8"?>    

    Schritt 2:

     < ?xml version="1.0" encoding="utf-8"?>     

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

    Code für die MainActivity.java-Datei.

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

    Code für die Layoutdatei activity_main.xml.

        

    Code für die Layoutdatei toast_background_color.xml, die im Ordner res-> layout erstellt wurde.

     < ?xml version="1.0" encoding="utf-8"?>       

    Benutzerdefiniertes Layout für toast, custom_toast.xml :

        

    Und die Java-Methode (einfach Toast-Nachricht an diese Methode übergeben):

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

    // Eine benutzerdefinierte Toast-class, wo Sie benutzerdefinierte oder Standard-Toast nach Wunsch zeigen können)

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

    Einfache Möglichkeit, den Toast zu gestalten,

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

    Um Probleme mit Layoutparametern zu vermeiden, die nicht ordnungsgemäß verwendet werden, müssen Sie beim Aufblasen des benutzerdefinierten Layouts darauf achten, dass Sie eine korrekte ViewGroup als übergeordnetes Element angeben.

    Viele Beispiele haben hier den Wert Null, stattdessen können Sie die vorhandene Toast ViewGroup als übergeordnetes Element übergeben.

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

    Hier ersetzen wir die vorhandene Toast-Ansicht durch unsere benutzerdefinierte Ansicht. Sobald Sie einen Bezug zu Ihrem Layoutlayout haben, können Sie alle Bilder / Textansichten, die es enthält, aktualisieren.

    Diese Lösung verhindert auch, dass “View nicht an Window Manager angehängt” von der Verwendung von NULL als übergeordnetes Element abstürzt.

    Vermeiden Sie außerdem die Verwendung von ConstraintLayout als benutzerdefiniertem Layoutstamm. Dies scheint bei Verwendung in einem Toast nicht zu funktionieren.

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

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