qu'entendez-vous par toast personnalisé? qu'essayez-vous de montrer?
thepoosh
Ce n'est pas une vraie question. Vous devriez essayer de lire la documentation sur developer.android
adatapost
J'ai une boîte de message personnalisée. Si vous pouvez le personnaliser, lui ajouter une minuterie et changer son apparence, je le poste pour vous. Peut tu?
"(ViewGroup) findViewById (R.id.toast_layout_root)" peut être remplacé par "null". Parce que votre activité ne contient pas toast_layout, elle sera toujours nulle de toute façon.
stevo.mettre le
2
Mon toast personnalisé ne s'affichait pas parce que j'utilisais la nouvelle mise en page de contraintes comme vue racine de mon toast personnalisé. Une fois que je suis passé à la disposition linéaire, tout fonctionnait parfaitement. Alors soyez prévenu ...
Charles Woodson
vraiment n'importe qui pourrait expliquer le but de findViewById (R.id.toast_layout_root)? ça va être nul de toute façon, et ça marche parfaitement bien avec juste passer null
sergey.n
Je ne connais pas non plus le but de la vue racine (null), mais dans la documentation officielle est également présente, si quelqu'un peut expliquer pourquoi, ce serait génial! developer.android.com/guide/topics/ui/notifiers/toasts#java
Nestor Perez
utilisez ceci si vous plantez par findViewById est null: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee
38
Un toast est pour montrer des messages pendant de courts intervalles de temps; Ainsi, selon ma compréhension, vous souhaitez le personnaliser en y ajoutant une image et en changeant la taille, la couleur du texte du message. Si c'est tout ce que vous voulez faire, il n'est pas nécessaire de créer une mise en page séparée et de la gonfler dans l'instance Toast.
La vue par défaut de Toast contient un TextViewpour afficher les messages dessus. Donc, si nous avons la référence d'identifiant de ressource de cela TextView, nous pouvons jouer avec. Voici donc ce que vous pouvez faire pour y parvenir:
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();
Dans le code ci-dessus que vous pouvez voir, vous pouvez ajouter une image à TextView via la setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)position par rapport à TextView que vous souhaitez.
Il y a très moins de chances que cela se produise, mais encore, je pense qu'un chèque TextViewdevrait être là, juste pour être sûr et par un chèque, je veux dire un chèque nul ou un chèque de type. Juste au cas où, Google décide de modifier l'identifiant ou la vue pour afficher le texte dans la classe Toast. Quoi qu'il en soit ... +1
DroidDev
1
Vrai! Mais s'il est modifié, vous ne pourrez de toute façon pas accéder à l'identifiant de la ressource en raison de son inexistence. Mais même pour être en sécurité, une vérification NULL vous faciliterait la vie. @DroidDev merci pour la suggestion :)
TheLittleNaruto
16
ÉTAPE 1:
Créez d'abord une mise en page pour un toast personnalisé dans res/layout/custom_toast.xml:
ÉTAPE 2: Dans le code d'activité, obtenez la vue personnalisée ci-dessus et attachez-la à Toast:
// 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();
Pour plus d'informations, découvrez comment nous créons un toast personnalisé sur Android:
Voir le lien ici . Vous trouvez votre solution. Et essaye:
Création d'une vue Toast personnalisée
Si un simple message texte ne suffit pas, vous pouvez créer une mise en page personnalisée pour votre notification toast. Pour créer une mise en page personnalisée, définissez une mise en page View, en XML ou dans votre code d'application, et transmettez l'objet View racine à la méthode setView (View).
Par exemple, vous pouvez créer la mise en page du toast visible dans la capture d'écran à droite avec le XML suivant (enregistré sous toast_layout.xml):
Notez que l'ID de l'élément LinearLayout est "toast_layout". Vous devez utiliser cet ID pour gonfler la mise en page à partir du XML, comme indiqué ici:
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();
Tout d'abord, récupérez le LayoutInflater avec getLayoutInflater () (ou getSystemService ()), puis gonflez la mise en page à partir de XML en utilisant inflate (int, ViewGroup). Le premier paramètre est l'ID de la ressource de mise en page et le second est la vue racine. Vous pouvez utiliser cette mise en page gonflée pour trouver plus d'objets View dans la mise en page, alors capturez et définissez maintenant le contenu des éléments ImageView et TextView. Enfin, créez un nouveau Toast avec Toast (Contexte) et définissez certaines propriétés du toast, telles que la gravité et la durée. Appelez ensuite setView (View) et transmettez-lui la mise en page gonflée. Vous pouvez maintenant afficher le toast avec votre disposition personnalisée en appelant show ().
Remarque: n'utilisez pas le constructeur public pour un Toast, sauf si vous allez définir la disposition avec setView (View). Si vous n'avez pas de disposition personnalisée à utiliser, vous devez utiliser makeText (Context, int, int) pour créer le Toast.
Je pense que la plupart des exemples XML customtoast sur Internet sont basés sur la même source.
La documentation Android, qui est à mon avis très obsolète. fill_parent ne doit plus être utilisé. Je préfère utiliser wrap_content en combinaison avec un xml.9.png. De cette façon, vous pouvez définir la taille minimale de toastbackground sur toute la taille de la source fournie.
Si des toasts plus complexes sont nécessaires, un cadre ou une disposition relative doit être utilisé à la place de LL.
Pour éviter que les paramètres layout_ * ne soient correctement utilisés, vous devez vous assurer que lorsque vous gonflez votre mise en page personnalisée, vous spécifiez un ViewGroup correct en tant que parent.
De nombreux exemples passent null ici, mais à la place, vous pouvez passer le Toast ViewGroup existant en tant que parent.
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()
Ici, nous remplaçons la vue Toast existante par notre vue personnalisée. Une fois que vous avez une référence à votre "mise en page", vous pouvez mettre à jour toutes les images / vues de texte qu'elle peut contenir.
Cette solution empêche également les pannes de "Vue non attachée au gestionnaire de fenêtres" d'utiliser null comme parent.
Évitez également d'utiliser ConstraintLayout comme racine de mise en page personnalisée, cela semble ne pas fonctionner lorsqu'il est utilisé dans un Toast.
Code du fichier de mise en page activity_main.xml.
<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 du fichier de mise en page toast_background_color.xml créé dans le dossier res-> layout.
Les toasts personnalisés de l'arrière-plan sont bloqués, Android 11 protège les utilisateurs en abandonnant les vues de toast personnalisées. Pour des raisons de sécurité et pour maintenir une bonne expérience utilisateur, le système bloque les toasts contenant des vues personnalisées si ces toasts sont envoyés depuis l'arrière-plan par une application qui cible Android 11.
Ajout de la méthode addCallback () dans Android R Si vous souhaitez être averti lorsqu'un toast (texte ou personnalisé) apparaît ou disparaît.
Le texte le plus important de l' API toast change que pour les applications qui ciblent Android 11, la getView()méthode retourne null lorsque vous y accédez.Assurez-vous donc de protéger vos applications de FATAL EXCEPTION, vous savez ce que je veux dire :)
En utilisant cette bibliothèque nommée Toasty, je pense que vous avez suffisamment de flexibilité pour faire un toast personnalisé par l'approche suivante -
Toasty.custom(yourContext,"I'm a custom Toast", yourIconDrawable, tintColor, duration, withIcon,
shouldTint).show();
Vous pouvez également transmettre du texte formaté à Toasty et voici l' extrait de code
Réponses:
Utilisez le code ci-dessous d'un toast personnalisé. Cela peut vous aider.
toast.xml
MainActivity.java
Et consultez les liens ci-dessous également pour un toast personnalisé.
Toast personnalisé avec horloge analogique
YouTube: création d'un toast personnalisé avec un bouton dans Android Studio
la source
Un toast est pour montrer des messages pendant de courts intervalles de temps; Ainsi, selon ma compréhension, vous souhaitez le personnaliser en y ajoutant une image et en changeant la taille, la couleur du texte du message. Si c'est tout ce que vous voulez faire, il n'est pas nécessaire de créer une mise en page séparée et de la gonfler dans l'instance Toast.
La vue par défaut de Toast contient un
TextView
pour afficher les messages dessus. Donc, si nous avons la référence d'identifiant de ressource de celaTextView
, nous pouvons jouer avec. Voici donc ce que vous pouvez faire pour y parvenir:Dans le code ci-dessus que vous pouvez voir, vous pouvez ajouter une image à TextView via la
setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
position par rapport à TextView que vous souhaitez.Mettre à jour:
Avoir écrit une classe de constructeur pour simplifier l'objectif ci-dessus; Voici le lien: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc
Vérifiez le
HowToUse.kt
lien ci-dessus.Production:
la source
TextView
devrait être là, juste pour être sûr et par un chèque, je veux dire un chèque nul ou un chèque de type. Juste au cas où, Google décide de modifier l'identifiant ou la vue pour afficher le texte dans la classe Toast. Quoi qu'il en soit ... +1ÉTAPE 1:
Créez d'abord une mise en page pour un toast personnalisé dans
res/layout/custom_toast.xml
:ÉTAPE 2: Dans le code d'activité, obtenez la vue personnalisée ci-dessus et attachez-la à Toast:
Pour plus d'informations, découvrez comment nous créons un toast personnalisé sur Android:
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
la source
Voir le lien ici . Vous trouvez votre solution. Et essaye:
Création d'une vue Toast personnalisée
Si un simple message texte ne suffit pas, vous pouvez créer une mise en page personnalisée pour votre notification toast. Pour créer une mise en page personnalisée, définissez une mise en page View, en XML ou dans votre code d'application, et transmettez l'objet View racine à la méthode setView (View).
Par exemple, vous pouvez créer la mise en page du toast visible dans la capture d'écran à droite avec le XML suivant (enregistré sous toast_layout.xml):
Notez que l'ID de l'élément LinearLayout est "toast_layout". Vous devez utiliser cet ID pour gonfler la mise en page à partir du XML, comme indiqué ici:
Tout d'abord, récupérez le LayoutInflater avec getLayoutInflater () (ou getSystemService ()), puis gonflez la mise en page à partir de XML en utilisant inflate (int, ViewGroup). Le premier paramètre est l'ID de la ressource de mise en page et le second est la vue racine. Vous pouvez utiliser cette mise en page gonflée pour trouver plus d'objets View dans la mise en page, alors capturez et définissez maintenant le contenu des éléments ImageView et TextView. Enfin, créez un nouveau Toast avec Toast (Contexte) et définissez certaines propriétés du toast, telles que la gravité et la durée. Appelez ensuite setView (View) et transmettez-lui la mise en page gonflée. Vous pouvez maintenant afficher le toast avec votre disposition personnalisée en appelant show ().
Remarque: n'utilisez pas le constructeur public pour un Toast, sauf si vous allez définir la disposition avec setView (View). Si vous n'avez pas de disposition personnalisée à utiliser, vous devez utiliser makeText (Context, int, int) pour créer le Toast.
la source
Mise en page personnalisée pour le pain grillé,
custom_toast.xml
:Et la méthode Java (transmettez simplement le message toast à cette méthode):
la source
Vous pouvez télécharger le code ici .
Étape 1:
Étape 2:
Étape 3:
la source
Je pense que la plupart des exemples XML customtoast sur Internet sont basés sur la même source.
La documentation Android, qui est à mon avis très obsolète. fill_parent ne doit plus être utilisé. Je préfère utiliser wrap_content en combinaison avec un xml.9.png. De cette façon, vous pouvez définir la taille minimale de toastbackground sur toute la taille de la source fournie.
Si des toasts plus complexes sont nécessaires, un cadre ou une disposition relative doit être utilisé à la place de LL.
toast.xml
background.xml
background_96 est background_96.9.png.
Ce n'est pas très bien testé, et les indices sont appréciés :)
la source
Pour éviter que les paramètres layout_ * ne soient correctement utilisés, vous devez vous assurer que lorsque vous gonflez votre mise en page personnalisée, vous spécifiez un ViewGroup correct en tant que parent.
De nombreux exemples passent null ici, mais à la place, vous pouvez passer le Toast ViewGroup existant en tant que parent.
Ici, nous remplaçons la vue Toast existante par notre vue personnalisée. Une fois que vous avez une référence à votre "mise en page", vous pouvez mettre à jour toutes les images / vues de texte qu'elle peut contenir.
Cette solution empêche également les pannes de "Vue non attachée au gestionnaire de fenêtres" d'utiliser null comme parent.
Évitez également d'utiliser ConstraintLayout comme racine de mise en page personnalisée, cela semble ne pas fonctionner lorsqu'il est utilisé dans un Toast.
la source
C'est ce que j'ai utilisé
AllMethodsInOne.java
YourFile.java
En appelant, écrivez ci-dessous.
la source
Code pour le fichier MainActivity.java.
Code du fichier de mise en page activity_main.xml.
Code du fichier de mise en page toast_background_color.xml créé dans le dossier res-> layout.
la source
// Une classe de toast personnalisée où vous pouvez afficher des toasts personnalisés ou par défaut comme vous le souhaitez)
la source
Un moyen simple de personnaliser le pain grillé,
la source
Pour tous les utilisateurs de Kotlin
Vous pouvez créer une extension comme suit:
la source
Il est très simple de créer notre propre coutume
Toast
.Suivez simplement les étapes ci-dessous.
Étape 1
Créez la mise en page personnalisée que vous souhaitez
Étape 2
Créez maintenant la classe personnalisée qui s'étend avec
Toast
.Nous avons créé le toast personnalisé.
Étape 3
Maintenant, enfin, comment pouvons-nous l'utiliser.
Prendre plaisir!!
la source
Attention, mises à jour des toasts dans Android 11
Ajout de la méthode addCallback () dans Android R Si vous souhaitez être averti lorsqu'un toast (texte ou personnalisé) apparaît ou disparaît.
Le texte le plus important de l' API toast change que pour les applications qui ciblent Android 11, la
getView()
méthode retourne null lorsque vous y accédez.Assurez-vous donc de protéger vos applications de FATAL EXCEPTION, vous savez ce que je veux dire :)la source
En utilisant cette bibliothèque nommée Toasty, je pense que vous avez suffisamment de flexibilité pour faire un toast personnalisé par l'approche suivante -
Vous pouvez également transmettre du texte formaté à Toasty et voici l' extrait de code
la source
Référence: https://developer.android.com/guide/topics/ui/notifiers/toasts
la source