Comment changer de position de Toast dans Android?
Question
Quand j'utilise Toast
pour afficher un texte contextuel à l'écran, il affiche le texte un peu au-dessus du bas de l'écran, qui est la position par défaut.
Maintenant, je veux montrer au milieu de l'écran ou quelque part en fonction de mon choix.
Quelqu'un peut-il me guider comment y parvenir?
La solution
De la documentation ,
Positionnement Toast
Une notification de pain grillé standard apparaît au bas de l'écran, centrée horizontalement. Vous pouvez modifier cette position avec le Procédé
setGravity(int, int, int)
. Cela accepte trois paramètres: unGravity
constant, unx-position
offset, et uny-position
décalage.Par exemple, si vous décidez que le pain doit apparaître dans la coin supérieur gauche, vous pouvez définir la gravité comme ceci:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
Si vous voulez pousser la position à droite, augmenter la valeur de le second paramètre. Pour déplacer vers le bas, augmenter la valeur du dernier paramètre.
Autres conseils
Si vous obtenez une erreur indiquant que vous devez appeler maketext, le code suivant corriger:
Toast toast= Toast.makeText(getApplicationContext(),
"Your string here", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
Vous pouvez personnaliser l'emplacement de votre Toast en utilisant:
setGravity(int gravity, int xOffset, int yOffset)
Cela vous permet d'être très précis sur l'endroit où vous voulez que l'emplacement de votre Toast être.
L'une des choses les plus utiles sur les paramètres et yOffset est xOffset que vous pouvez les utiliser pour placer le Toast par rapport à un certain point de vue.
Par exemple, si vous voulez un toast personnalisé qui apparaît sur le dessus d'un bouton, vous pouvez créer une fonction comme ceci:
// v is the Button view that you want the Toast to appear above
// and messageId is the id of your string resource for the message
private void displayToastAboveButton(View v, int messageId)
{
int xOffset = 0;
int yOffset = 0;
Rect gvr = new Rect();
View parent = (View) v.getParent();
int parentHeight = parent.getHeight();
if (v.getGlobalVisibleRect(gvr))
{
View root = v.getRootView();
int halfWidth = root.getRight() / 2;
int halfHeight = root.getBottom() / 2;
int parentCenterX = ((gvr.right - gvr.left) / 2) + gvr.left;
int parentCenterY = ((gvr.bottom - gvr.top) / 2) + gvr.top;
if (parentCenterY <= halfHeight)
{
yOffset = -(halfHeight - parentCenterY) - parentHeight;
}
else
{
yOffset = (parentCenterY - halfHeight) - parentHeight;
}
if (parentCenterX < halfWidth)
{
xOffset = -(halfWidth - parentCenterX);
}
if (parentCenterX >= halfWidth)
{
xOffset = parentCenterX - halfWidth;
}
}
Toast toast = Toast.makeText(getActivity(), messageId, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, xOffset, yOffset);
toast.show();
}
Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
Toast mytoast= Toast.makeText(getApplicationContext(), "Toast Message", 1);
mytoast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0); // for center horizontal
//mytoast.setGravity(Gravity.CENTER_VERTICAL); // for center vertical
//mytoast.setGravity(Gravity.TOP); // for top
mytoast.show();
Le code ci-dessus est aidera u pour afficher des toasts au milieu de l'écran ou selon ur choix pour que juste régler la gravité de pain grillé selon ur besoin
Note: Pour ce processus u doivent utiliser l'objet de Toast
Le procédé pour changer la couleur, la position et la couleur d'arrière-plan de pain grillé est:
Toast toast=Toast.makeText(getApplicationContext(),"This is advanced toast",Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT,0,0);
View view=toast.getView();
TextView view1=(TextView)view.findViewById(android.R.id.message);
view1.setTextColor(Color.YELLOW);
view.setBackgroundResource(R.color.colorPrimary);
toast.show();
Pour la ligne par ligne d'explication: https://www.youtube.com/watch?v = 5bzhGd1HZOc
pain grillé à l'écran Topin
toast.setView(view);
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
en bas
toast.setView(view);
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
de la même façon que nous pouvons mettre en toast à gauche, à droite et aussi centre
// Une classe de pain grillé personnalisé où vous pouvez afficher des toasts personnalisée 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(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();
}
}