Toast personnalisé sur Android: un exemple simple

Je suis nouveau sur la programmation Android. Quel est un exemple simple montrant une notification de toast personnalisée sur Android?

Utilisez le code ci-dessous d’un Toast personnalisé. Cela peut vous aider.

toast.xml

    

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

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

Un toast sert à afficher des messages pour 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, vous voulez faire, alors il n’y a pas besoin de faire une mise en page séparée et de le gonfler à l’instance Toast.

La vue par défaut de Toast contient un TextView pour afficher des messages. Donc, si nous avons la référence d’ID de ressource de cette TextView , nous pouvons jouer avec elle. Donc, voici 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.setCompoundDrawablesWithInsortingnsicBounds(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, vous pouvez voir, vous pouvez append une image à TextView via setCompoundDrawablesWithInsortingnsicBounds(int left, int top, int right, int bottom) quelle que soit la position par rapport à TextView que vous souhaitez.

Sortie:

Entrez la description de l'image ici

ÉTAPE 1:

Commencez par créer 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 associez-la à 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(); 

Pour plus d’aide, voyez comment nous créons des toasts personnalisés dans Android:

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

Voir le lien ici . Vous trouvez votre solution. Et essaye:

Création d’une vue de toast personnalisée

Si un simple message texte ne suffit pas, vous pouvez créer une présentation personnalisée pour votre notification de toast. Pour créer une disposition personnalisée, définissez une disposition de vue, en XML ou dans votre code d’application, et transmettez l’object Vue racine à la méthode setView (View).

Par exemple, vous pouvez créer la mise en page pour le toast visible dans la capture d’écran à droite avec le code XML suivant (enregistré en tant que 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 illustré 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 = new Toast(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 d’autres objects View dans la mise en page. 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 à moins que vous ne définissiez 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.

C’est ce que j’ai utilisé

AllMethodsInOne.java

 public static Toast displayCustomToast(FragmentActivity mAct, Ssortingng toastText, Ssortingng toastLength, Ssortingng 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

En appelant, écrivez simplement ci-dessous.

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

Je pense que la plupart des exemples de xml sur Internet sont basés sur la même source.

La documentation Android, qui est très obsolète à mon avis. fill_parent ne devrait plus être utilisé. Je préfère utiliser wrap_content en combinaison avec xml.9.png. De cette façon, vous pouvez définir la taille minimale de toastbackground sur la taille de la source fournie.

Si des toasts plus complexes sont requirejs, le cadre ou la 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 conseils sont appréciés 🙂

Vous pouvez télécharger le code ici .

Étape 1:

     

Étape 2:

      

Étape 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 pour le fichier 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(); } }); } } 

Code du fichier de disposition activity_main.xml.

    

Code pour le fichier de mise en page toast_background_color.xml créé dans le dossier res-> layout.

        

Disposition personnalisée pour le pain grillé, custom_toast.xml :

    

Et la méthode Java (il suffit de passer le message toast à cette méthode):

 public void toast(Ssortingng 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(); } 

// Une classe de toast personnalisée où vous pouvez afficher le toast personnalisé ou par défaut comme vous le souhaitez)

 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(Ssortingng message) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } /** * @param message */ public void showSmallMessage(Ssortingng 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(Ssortingng 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(Ssortingng 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(); } } 

Moyen simple pour personnaliser le pain grillé,

 private void MsgDisplay(Ssortingng 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(); } 

Pour éviter que les parameters layout_ * ne soient pas correctement utilisés, vous devez vous assurer que lorsque vous gonflez votre présentation personnalisée, vous spécifiez un ViewGroup correct en tant que parent.

De nombreux exemples transmettent null ici, mais vous pouvez transmettre 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 “mise en page”, vous pouvez alors mettre à jour les images / vues de texte qu’il peut contenir.

Cette solution empêche également tout “Affichage non attaché au gestionnaire de fenêtre” de se bloquer en utilisant null en tant que parent.

De même, évitez d’utiliser ConstraintLayout comme racine de mise en page personnalisée, cela semble ne pas fonctionner avec un Toast.

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

Référence: https://developer.android.com/guide/topics/ui/notifiers/toasts