2010-03-24 19 views
202

Gdy używam Toast, aby wyświetlać jakiś wyskakujący tekst na ekranie, wyświetla on tekst nieco powyżej dolnej części ekranu, która jest domyślną pozycją.Jak zmienić pozycję Toasta w systemie Android?

Teraz chcę wyświetlić go na środku ekranu lub gdzieś według mojego wyboru.

Czy ktoś może mi pomóc, jak to osiągnąć?

Odpowiedz

342

Od the documentation,

Ustawienie Toast

Standardowe zgłoszenie tosty pojawia się w dolnej części ekranu, wyśrodkowany poziomo. Możesz zmienić tę pozycję za pomocą metody setGravity(int, int, int). To akceptuje trzy parametry: stałą Gravity, przesunięcie x-position i przesunięcie y-position.

Na przykład, jeśli zdecydujesz, że tosty powinny pojawić się w lewym górnym rogu, można ustawić wagę takiego:

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); 

Jeśli chcesz sugerować pozycję w prawo, wzrost wartość drugiego parametru: . Aby go przesunąć, zwiększ wartość ostatniego parametru .

+9

Jakie są tam wartości całkowite? Czy są to dpi? lub co to jest max? – clifgray

+8

Może wskazywać oczywiste, ale "Gravity.CENTER_VERTICAL" umieszcza toast na środku ekranu. – Felix

+3

Przesunięcie xi y są w pikselach, więc maksymalna jest szerokość/wysokość wyświetlacza. – bluewhile

115

Tak na marginesie, jeśli się błąd wskazujący, że trzeba zadzwonić Maketext poniższy kod sprawia, że ​​działa:

Toast toast= Toast.makeText(getApplicationContext(), 
"Your string here", Toast.LENGTH_SHORT); 
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0); 
toast.show(); 
+0

makeText zwraca obiekt Toast, więc możesz po prostu dodać .addGravity i .show po makeText. – NikkyD

+1

_ "jeśli pojawi się błąd wskazujący, że musisz wywołać makeText" _ - kiedy pojawiłby się błąd? –

+1

Błąd występuje, jeśli użyjesz Konstruktora, więc 'nowy toast (kontekst)' zamiast 'Toast.makeText (...)' – bluewhile

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

Powyższy kod to pomoże u, aby wyświetlić tosty w środek ekranu lub według własnego wyboru, po prostu ustaw toast grawitacyjnie zgodnie z potrzebą ur

Uwaga: Do tego procesu należy użyć obiektu Toast

11

Można dostosować lokalizację Toast za pomocą:

setGravity(int gravity, int xOffset, int yOffset)

docs

To pozwala być bardzo specyficzne o którym chcesz lokalizację Toast być.

Jedną z najbardziej przydatnych rzeczy w parametrach xOffset i yOffset jest to, że można ich użyć do umieszczenia Toasta względem określonego widoku.

Na przykład, jeśli chcesz złożyć zamówienie Toast, który pojawia się na górze przycisku, można utworzyć funkcję tak:

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

Ta odpowiedź http://stackoverflow.com/a/21026866/630833, ma rozmiar Toast pod uwagę, co było dla mnie pomocne. – jayeffkay

+0

To jest świetny przykład. Dzięki. – wonsuc

1

ustawienia tosty na ekranie Topin

toast.setView(view); 
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom 
toast.setDuration(Toast.LENGTH_LONG); 
toast.show(); 

teraz na dole

toast.setView(view); 
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom 
toast.setDuration(Toast.LENGTH_LONG); 
toast.show(); 

w ten sam sposób możemy ustawić grzankę w lewo, prawo, a także centrum

Kliknij here

4
Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG); 
toast.setGravity(Gravity.CENTER, 0, 0); 
toast.show(); 
0

Sposób zmienić kolor, położenie i kolor tła tosty jest:

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

Dla linia po linii wyjaśnienia: https://www.youtube.com/watch?v=5bzhGd1HZOc

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać odnośnik. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. –

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić w nim istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ opinia/niskiej jakości-posts/16825296) –

0

// A Custom toast class, gdzie można wyświetlać niestandardowe lub domyślne tosty)

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

     } 
Powiązane problemy