Android에서 Toast의 위치를 ​​변경하는 방법은 무엇입니까?


279

내가 사용할 때 Toast화면에 팝업 텍스트를 표시 데 텍스트가 화면 아래쪽 약간 위에 표시됩니다 (기본 위치).

이제 화면 중간 또는 원하는 위치에 표시하고 싶습니다.

누구든지 이것을 달성하는 방법을 안내 할 수 있습니까?

답변:


410

에서 문서 ,

토스트 배치

표준 토스트 알림이 화면 하단 근처에 가로로 가운데에 나타납니다. setGravity(int, int, int)방법 으로이 위치를 변경할 수 있습니다 . 여기에는 Gravity상수, x-position오프셋 및y-position 있습니다.

예를 들어, 토스트가 왼쪽 상단에 나타나도록 결정하면 다음과 같이 중력을 설정할 수 있습니다.

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

오른쪽으로 위치를 이동하려면 두 번째 매개 변수의 값을 늘리십시오. 조금 내리려면 마지막 매개 변수의 값을 늘리십시오.


11
정수 값은 무엇입니까? 그들은 dpi입니까? 또는 최대는 무엇입니까?
clifgray 2016 년

9
명백한 점을 지적 할 수도 있지만 Gravity.CENTER_VERTICAL토스트를 화면 중앙에 놓을 것입니다.
Felix Felix

3
x 및 y 오프셋은 픽셀 단위이므로 최대 값은 디스플레이 너비 / 높이입니다.
bluewhile

2
@ Pentium10 문서에서 오프셋이 픽셀 단위임을 나타냅니다. "dp"단위가 아닌 "px"단위라고 가정해야합니까?
batbrat

새로운 은하 s6에 대한 토스트 메시지는 두 가지 다른 위치에 표시됩니다. 먼저 왼쪽 수평 중심에서 수직으로 이동 한 다음 아래쪽 수평 중심에서 아래로 이동합니다. 이 효과는 이전 테스트 장치에서는 발생하지 않습니다. 화면을
두드리면

150

makeText를 호출해야한다는 오류가 발생하면 다음 코드에서이를 해결합니다.

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

1
makeText는 Toast 객체를 반환하므로 makeText 뒤에 .addGravity 및 .show를 추가 할 수 있습니다.
NikkyD

1
"makeText를 호출해야한다는 오류가 발생하면" 오류가 언제 표시됩니까?
Jacek Laskowski

1
생성자를 new Toast(context)대신 사용하는 경우 오류가 발생합니다.Toast.makeText(...)
bluewhile

16

다음을 사용하여 토스트 위치를 사용자 정의 할 수 있습니다.

setGravity(int gravity, int xOffset, int yOffset)

문서

이를 통해 토스트의 위치를 ​​구체적으로 지정할 수 있습니다.

xOffset 및 yOffset 매개 변수에 대해 가장 유용한 것 중 하나는 특정 뷰를 기준으로 토스트를 배치하는 데 사용할 수 있다는 것입니다.

예를 들어, 버튼 위에 나타나는 사용자 정의 토스트를 만들려면 다음과 같은 기능을 만들 수 있습니다.

// 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
이 답변 stackoverflow.com/a/21026866/630833 은 Toast의 크기를 고려하여 도움이되었습니다.
jayeffkay

이것은 좋은 예입니다. 감사.
wonsuc

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

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

위의 코드는 화면 중간에 토스트를 표시하는 데 도움이되거나 ur 필요에 따라 토스트 중력을 설정하는 ur 선택에 따라 표시됩니다.

참고 :이 과정에서 토스트의 객체를 사용해야합니다


3

토스트의 색상, 위치 및 배경색을 변경하는 방법은 다음과 같습니다.

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

라인 별 설명 : https://www.youtube.com/watch?v=5bzhGd1HZOc


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
greg-449

2

topin 화면에서 토스트 설정

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

이제 바닥에

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

왼쪽, 오른쪽 및 중앙에 토스트를 설정할 수있는 것과 같은 방식으로

여기를 클릭 하십시오


0

// 원하는대로 사용자 정의 또는 기본 토스트를 표시 할 수있는 사용자 정의 토스트 클래스)

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

        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.