2010-03-24 38 views
202

Khi tôi sử dụng Toast để hiển thị một số văn bản bật lên trên màn hình, văn bản sẽ hiển thị văn bản cao hơn một chút so với phần dưới cùng của màn hình, đây là vị trí mặc định.Làm thế nào để thay đổi vị trí của bánh mì nướng trong Android?

Bây giờ tôi muốn hiển thị nó ở giữa màn hình hoặc một nơi nào đó theo sự lựa chọn của tôi.

Có ai có thể hướng dẫn tôi cách đạt được điều này không?

Trả lời

342

Từ the documentation,

Định vị Toast bạn

Một thông báo bánh mì nướng tiêu chuẩn xuất hiện gần phía dưới của màn hình, làm trung tâm theo chiều ngang. Bạn có thể thay đổi vị trí này bằng phương pháp setGravity(int, int, int). Điều này chấp nhận ba thông số: a Gravity không đổi, chênh lệch x-position và bù trừ y-position.

Ví dụ, nếu bạn quyết định rằng bánh mì nướng sẽ xuất hiện ở góc trên bên trái, bạn có thể thiết lập mức độ nghiêm trọng như thế này:

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

Nếu bạn muốn di chuyển vị trí sang bên phải, tăng giá trị của tham số thứ hai là . Để di chuyển nó xuống, hãy tăng giá trị của thông số cuối cùng.

+9

giá trị số nguyên ở đó là gì? Họ có phải là dpi không? hoặc tối đa là gì? – clifgray

+8

Có thể chỉ ra rõ ràng, nhưng 'Gravity.CENTER_VERTICAL' sẽ đặt bánh mì nướng ở giữa màn hình. – Felix

+3

x và y bù đắp bằng pixel, vì vậy tối đa là chiều rộng/chiều cao hiển thị của bạn. – bluewhile

115

Là một sang một bên nếu bạn nhận được lỗi cho biết bạn phải gọi makeText, các mã sau đây làm cho nó hoạt động:

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

makeText trả về một đối tượng Bánh mì nướng, vì vậy bạn chỉ cần thêm .addGravity và .show sau makeText. – NikkyD

+1

_ "nếu bạn gặp lỗi chỉ ra rằng bạn phải gọi makeText" _ - khi nào thì lỗi xuất hiện? –

+1

Lỗi xảy ra nếu bạn sử dụng Constructor để 'new Toast (context)' thay vì '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(); 

Đoạn mã trên là sẽ giúp u để hiển thị bánh mì nướng trong giữa màn hình hoặc theo sự lựa chọn ur cho rằng chỉ cần thiết lập trọng lực bánh mì nướng theo nhu cầu ur

Lưu ý: Đối với quá trình này, bạn phải sử dụng đối tượng của bánh mì nướng

11

Bạn có thể tùy chỉnh vị trí của Toast của bạn bằng cách sử dụng:

setGravity(int gravity, int xOffset, int yOffset)

docs

này cho phép bạn rất cụ thể về nơi bạn muốn vị trí của Toast của bạn được.

Một trong những điều hữu ích nhất về các tham số xOffset và yOffset là bạn có thể sử dụng chúng để đặt Toast tương ứng với một View nhất định.

Ví dụ, nếu bạn muốn thực hiện một Toast tùy chỉnh xuất hiện trên đỉnh của một Button, bạn có thể tạo một hàm như thế này:

// 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

Câu trả lời này http://stackoverflow.com/a/21026866/630833, có kích thước của Toast xem xét, đó là hữu ích cho tôi. – jayeffkay

+0

Đây là một ví dụ tuyệt vời. Cảm ơn. – wonsuc

1

thiết bánh mì nướng tại màn hình topin

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

bây giờ ở dưới cùng

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

giống như cách chúng tôi có thể đặt bánh mì nướng ở bên trái, bên phải và trung tâm

Bấm here

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

Phương pháp này để thay đổi màu sắc, vị trí và màu nền của bánh mì nướng là:

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

Đối với từng dòng giải thích: https://www.youtube.com/watch?v=5bzhGd1HZOc

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. –

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/16825296) –

0

// Một tùy chỉnh lớp bánh mì nướng nơi bạn có thể hiển thị bánh mì nướng tùy chỉnh hoặc bánh mì nướng mặc định như mong muốn)

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

     } 
Các vấn đề liên quan