Was meinst du mit Custom Toast? was versuchst du zu zeigen
Thepoosh
Das ist keine wirkliche Frage. Sie sollten versuchen, Dokumente unter developer.android
adatapost
Ich habe ein benutzerdefiniertes Meldungsfeld. Wenn Sie es anpassen und einen Timer hinzufügen und sein Erscheinungsbild ändern können, poste ich es für Sie. Können Sie?
"(ViewGroup) findViewById (R.id.toast_layout_root)" kann durch "null" ersetzt werden. Da Ihre Aktivität kein toast_layout enthält, ist sie sowieso immer null.
stevo.mit
2
Mein benutzerdefinierter Toast wurde nicht angezeigt, da ich das neue Einschränkungslayout als Stammansicht meines benutzerdefinierten Toasts verwendet habe. Nachdem ich zu Linear Layout gewechselt hatte, funktionierte alles perfekt. Also seien Sie gewarnt ...
Charles Woodson
Kann wirklich jeder den Zweck von findViewById (R.id.toast_layout_root) erklären? es wird sowieso null sein, und es funktioniert perfekt,
Verwenden Sie diese Option, wenn der Absturz von findViewById null ist: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee
37
Ein Toast dient zum Anzeigen von Nachrichten für kurze Zeitintervalle. Nach meinem Verständnis möchten Sie es also anpassen, indem Sie ein Bild hinzufügen und Größe und Farbe des Nachrichtentextes ändern. Wenn das alles ist, was Sie tun möchten, müssen Sie kein separates Layout erstellen und es auf die Toast-Instanz aufblasen.
Die Standardansicht von Toast enthält eine TextViewzum Anzeigen von Nachrichten. Wenn wir also die Ressourcen-ID-Referenz dafür haben, TextViewkö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();
Im obigen Code können Sie TextView über die gewünschte setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)Position relativ zu TextView ein Bild hinzufügen .
Es gibt sehr wenig Chancen dafür, aber ich denke trotzdem, dass ein Scheck dafür vorhanden TextViewsein sollte, nur um sicher zu gehen, und mit einem Scheck meine ich einen Nullscheck oder einen Typprüfung. Für alle Fälle beschließt Google, die ID oder Ansicht für die Anzeige von Text in der Toast-Klasse zu ändern. Wie auch immer ... +1
DroidDev
1
Wahr! Wenn es jedoch geändert wird, können Sie ohnehin nicht auf die Ressourcen-ID zugreifen, da sie nicht vorhanden ist. Aber auch wenn Sie auf der sicheren Seite sind, würde ein NULL-Check Ihr Leben leichter machen. @DroidDev danke für den Vorschlag :)
TheLittleNaruto
16
SCHRITT 1:
Erstellen Sie zunächst ein Layout für einen benutzerdefinierten Toast in res/layout/custom_toast.xml:
SCHRITT 2: Rufen Sie im Aktivitätscode die obige benutzerdefinierte Ansicht auf und hängen Sie sie an Toast an:
// Get your custom_toast.xml ayoutLayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(R.layout.custom_toast,(ViewGroup) findViewById(R.id.custom_toast_layout_id));// set a messageTextView text =(TextView) layout.findViewById(R.id.text);
text.setText("Button is clicked!");// Toast...Toast toast =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Weitere Hilfe finden Sie unter Erstellen eines benutzerdefinierten Toasts in Android:
Siehe Link hier . Sie finden Ihre Lösung. Und versuche:
Erstellen einer benutzerdefinierten Toastansicht
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 Sie das Root-View-Objekt an die setView (View) -Methode.
Beispielsweise können Sie das im Screenshot rechts sichtbare Layout für den Toast mit der folgenden XML-Datei erstellen (gespeichert als toast_layout.xml):
Beachten Sie, dass die ID des LinearLayout-Elements "toast_layout" lautet. Sie müssen diese ID verwenden, um das Layout aus dem XML 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 =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Rufen Sie zuerst den LayoutInflater mit getLayoutInflater () (oder getSystemService ()) ab und blasen Sie dann das Layout mit inflate (int, ViewGroup) aus XML auf. Der erste Parameter ist die Layout-Ressourcen-ID und der zweite die Stammansicht. Mit diesem aufgeblasenen Layout können Sie weitere Ansichtsobjekte im Layout finden. Erfassen und definieren Sie nun den Inhalt für die ImageView- und TextView-Elemente. Erstellen Sie abschließend 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 aufgeblasene 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 können, müssen Sie makeText (Context, int, int) verwenden, um den Toast zu erstellen.
Ich denke, die meisten Customtoast-XML-Beispiele im Internet basieren auf derselben 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 Größe der bereitgestellten Quelle definieren.
Wenn komplexere Toasts erforderlich sind, sollte anstelle von LL ein Rahmen oder ein relatives Layout verwendet werden.
Um zu vermeiden, dass Probleme mit layout_ * -Parametern nicht ordnungsgemäß verwendet werden, müssen Sie beim Aufblasen Ihres benutzerdefinierten Layouts sicherstellen, dass Sie eine korrekte ViewGroup als übergeordnetes Element angeben.
Viele Beispiele übergeben hier null, aber 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 Verweis auf Ihr Layout "Layout" haben, können Sie alle darin enthaltenen Bilder / Textansichten aktualisieren.
Diese Lösung verhindert auch, dass Abstürze "Ansicht nicht an Fenstermanager angehängt" null als übergeordnetes Element verwenden.
Vermeiden Sie außerdem die Verwendung von ConstraintLayout als benutzerdefiniertes Layout-Stammverzeichnis. Dies scheint nicht zu funktionieren, wenn es in einem Toast verwendet wird.
<RelativeLayoutxmlns: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"><Buttonandroid: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>
Code für die Layoutdatei toast_background_color.xml, die im Ordner res-> layout erstellt wurde.
Benutzerdefinierte Toasts aus dem Hintergrund werden blockiert. Android 11 schützt Benutzer, indem benutzerdefinierte Toastansichten abgelehnt werden. Aus Sicherheitsgründen und um eine gute Benutzererfahrung zu gewährleisten, blockiert das System Toasts, die benutzerdefinierte Ansichten enthalten, wenn diese Toasts von einer App für Android 11 aus dem Hintergrund gesendet werden.
addCallback () -Methode in Android R hinzugefügt Wenn Sie benachrichtigt werden möchten, wenn ein Toast (Text oder benutzerdefiniert) angezeigt wird oder verschwindet.
Der wichtigste Text in der Toast-API ändert, dass für Apps, die auf Android 11 abzielen, die getView()Methode null zurückgibt, wenn Sie darauf zugreifen. Stellen Sie also sicher, dass Sie Ihre Apps vor FATAL EXCEPTION schützen. Sie wissen, was ich meine :)
Wenn Sie diese Bibliothek mit dem Namen Toasty verwenden , haben Sie meiner Meinung nach genügend Flexibilität, um einen benutzerdefinierten Toast mit dem folgenden Ansatz zu erstellen :
Toasty.custom(yourContext,"I'm a custom Toast", yourIconDrawable, tintColor, duration, withIcon,
shouldTint).show();
Sie können auch formatierten Text an Toasty übergeben. Hier ist das Code-Snippet
Antworten:
Verwenden Sie den folgenden Code eines benutzerdefinierten Toasts. Es kann Ihnen helfen.
toast.xml
MainActivity.java
Schauen Sie sich auch die folgenden Links an, um einen benutzerdefinierten Toast zu erhalten.
Kundenspezifischer Toast mit analoger Uhr
YouTube: Erstellen eines benutzerdefinierten Toasts mit der Schaltfläche in Android Studio
quelle
Ein Toast dient zum Anzeigen von Nachrichten für kurze Zeitintervalle. Nach meinem Verständnis möchten Sie es also anpassen, indem Sie ein Bild hinzufügen und Größe und Farbe des Nachrichtentextes ändern. Wenn das alles ist, was Sie tun möchten, müssen Sie kein separates Layout erstellen und es auf die Toast-Instanz aufblasen.
Die Standardansicht von Toast enthält eine
TextView
zum Anzeigen von Nachrichten. Wenn wir also die Ressourcen-ID-Referenz dafür haben,TextView
können wir damit spielen. Was können Sie tun, um dies zu erreichen:Im obigen Code können Sie TextView über die gewünschte
setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
Position relativ zu TextView ein Bild hinzufügen .Aktualisieren:
Haben eine Builder-Klasse geschrieben, um den oben genannten Zweck zu vereinfachen; Hier ist der Link: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc
Überprüfen Sie den
HowToUse.kt
obigen Link.Ausgabe:
quelle
TextView
sein sollte, nur um sicher zu gehen, und mit einem Scheck meine ich einen Nullscheck oder einen Typprüfung. Für alle Fälle beschließt Google, die ID oder Ansicht für die Anzeige von Text in der Toast-Klasse zu ändern. Wie auch immer ... +1SCHRITT 1:
Erstellen Sie zunächst ein Layout für einen benutzerdefinierten Toast in
res/layout/custom_toast.xml
:SCHRITT 2: Rufen Sie im Aktivitätscode die obige benutzerdefinierte Ansicht auf und hängen Sie sie an Toast an:
Weitere Hilfe finden Sie unter Erstellen eines benutzerdefinierten Toasts in Android:
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
quelle
Siehe Link hier . Sie finden Ihre Lösung. Und versuche:
Erstellen einer benutzerdefinierten Toastansicht
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 Sie das Root-View-Objekt an die setView (View) -Methode.
Beispielsweise können Sie das im Screenshot rechts sichtbare Layout für den Toast mit der folgenden XML-Datei erstellen (gespeichert als toast_layout.xml):
Beachten Sie, dass die ID des LinearLayout-Elements "toast_layout" lautet. Sie müssen diese ID verwenden, um das Layout aus dem XML aufzublähen, wie hier gezeigt:
Rufen Sie zuerst den LayoutInflater mit getLayoutInflater () (oder getSystemService ()) ab und blasen Sie dann das Layout mit inflate (int, ViewGroup) aus XML auf. Der erste Parameter ist die Layout-Ressourcen-ID und der zweite die Stammansicht. Mit diesem aufgeblasenen Layout können Sie weitere Ansichtsobjekte im Layout finden. Erfassen und definieren Sie nun den Inhalt für die ImageView- und TextView-Elemente. Erstellen Sie abschließend 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 aufgeblasene 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 können, müssen Sie makeText (Context, int, int) verwenden, um den Toast zu erstellen.
quelle
Benutzerdefiniertes Layout für Toast ,
custom_toast.xml
:Und die Java-Methode (übergeben Sie einfach eine Toastnachricht an diese Methode):
quelle
Sie können den Code hier herunterladen .
Schritt 1:
Schritt 2:
Schritt 3:
quelle
Ich denke, die meisten Customtoast-XML-Beispiele im Internet basieren auf derselben 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 Größe der bereitgestellten Quelle definieren.
Wenn komplexere Toasts erforderlich sind, sollte anstelle von LL ein Rahmen oder ein relatives Layout verwendet werden.
toast.xml
background.xml
background_96 ist background_96.9.png.
Dies ist nicht sehr gut getestet und Hinweise sind willkommen :)
quelle
Um zu vermeiden, dass Probleme mit layout_ * -Parametern nicht ordnungsgemäß verwendet werden, müssen Sie beim Aufblasen Ihres benutzerdefinierten Layouts sicherstellen, dass Sie eine korrekte ViewGroup als übergeordnetes Element angeben.
Viele Beispiele übergeben hier null, aber stattdessen können Sie die vorhandene Toast ViewGroup als übergeordnetes Element übergeben.
Hier ersetzen wir die vorhandene Toast-Ansicht durch unsere benutzerdefinierte Ansicht. Sobald Sie einen Verweis auf Ihr Layout "Layout" haben, können Sie alle darin enthaltenen Bilder / Textansichten aktualisieren.
Diese Lösung verhindert auch, dass Abstürze "Ansicht nicht an Fenstermanager angehängt" null als übergeordnetes Element verwenden.
Vermeiden Sie außerdem die Verwendung von ConstraintLayout als benutzerdefiniertes Layout-Stammverzeichnis. Dies scheint nicht zu funktionieren, wenn es in einem Toast verwendet wird.
quelle
Das habe ich benutzt
AllMethodsInOne.java
YourFile.java
Während Sie anrufen, schreiben Sie einfach unten.
quelle
Code für die Datei MainActivity.java.
Code für die Layoutdatei activity_main.xml.
Code für die Layoutdatei toast_background_color.xml, die im Ordner res-> layout erstellt wurde.
quelle
// Eine benutzerdefinierte Toastklasse, in der Sie nach Bedarf benutzerdefinierten oder Standard-Toast anzeigen können.)
quelle
Einfache Möglichkeit, den Toast anzupassen,
quelle
Für alle Kotlin-Benutzer
Sie können eine Erweiterung wie folgt erstellen:
quelle
Es ist sehr einfach, unsere eigenen Gewohnheiten zu erstellen
Toast
.Befolgen Sie einfach die folgenden Schritte.
Schritt 1
Erstellen Sie das gewünschte benutzerdefinierte Layout
Schritt 2
Erstellen Sie nun die benutzerdefinierte Klasse, die mit erweitert wird
Toast
.Wir haben den benutzerdefinierten Toast erstellt.
Schritt 3
Nun endlich, wie können wir es nutzen.
Genießen!!
quelle
Heads Up, Updates für Toast in Android 11
addCallback () -Methode in Android R hinzugefügt Wenn Sie benachrichtigt werden möchten, wenn ein Toast (Text oder benutzerdefiniert) angezeigt wird oder verschwindet.
Der wichtigste Text in der Toast-API ändert, dass für Apps, die auf Android 11 abzielen, die
getView()
Methode null zurückgibt, wenn Sie darauf zugreifen. Stellen Sie also sicher, dass Sie Ihre Apps vor FATAL EXCEPTION schützen. Sie wissen, was ich meine :)quelle
Wenn Sie diese Bibliothek mit dem Namen Toasty verwenden , haben Sie meiner Meinung nach genügend Flexibilität, um einen benutzerdefinierten Toast mit dem folgenden Ansatz zu erstellen :
Sie können auch formatierten Text an Toasty übergeben. Hier ist das Code-Snippet
quelle
Referenz: https://developer.android.com/guide/topics/ui/notifiers/toasts
quelle