programing

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

muds 2023. 8. 4. 23:22
반응형

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

사용할 때Toast화면에 일부 팝업 텍스트를 표시하기 위해 기본 위치인 화면 하단의 약간 위에 텍스트를 표시합니다.

이제 화면 중앙이나 원하는 곳에 표시합니다.

이를 달성하는 방법을 누가 안내해 줄 수 있습니까?

문서를 보면,

토스트 위치 지정

표준 토스트 알림이 화면 아래쪽에 수평으로 중앙에 표시됩니다.다음을 사용하여 이 위치를 변경할 수 있습니다.setGravity(int, int, int)방법.이는 세 가지 매개 변수를 허용합니다.Gravity상수, anx-position오프셋 및 ay-position상쇄하다

예를 들어 토스트가 왼쪽 상단 모서리에 나타나도록 결정한 경우 다음과 같이 중력을 설정할 수 있습니다.

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

오른쪽으로 위치를 이동하려면 두 번째 매개변수의 값을 늘립니다.이 값을 낮추려면 마지막 매개 변수의 값을 늘립니다.

make를 호출해야 함을 나타내는 오류가 발생한 경우텍스트, 다음 코드가 해결합니다.

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

설명서에서 다음을 참조하십시오.

경고: Android 빌드부터 시작합니다.VERSION_CODEDS#R, API 레벨 빌드를 대상으로 하는 앱용.VERSION_CODEDS#R 이상, 이 메서드(set Gravity)는 텍스트 토스트에서 호출될 때 No-op입니다.

그말은setGravityAPI 30+에서 더 이상 사용할 수 없으므로 필요한 동작을 수행하려면 다른 동작을 찾아야 합니다.

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

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

위의 코드는 화면 중앙에 토스트를 표시하거나 필요에 따라 토스트의 무게를 설정하는 데 도움이 됩니다.

참고: 이 프로세스를 수행하려면 토스트 개체를 사용해야 합니다.

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

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

 Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG);

 toast.setGravity(Gravity.CENTER, 0, 0);

 toast.show();

//이것은 오류에 대처하는 가장 좋은 솔루션입니다.

솔루션

fun Context.showToastOnTOP(message: String) = Toast.makeText(this, message, Toast.LENGTH_SHORT)
    .apply { setGravity(Gravity.TOP, 0, 0); show() }

fun Context.showToastOnBOTTOM(message: String) = Toast.makeText(this, message, Toast.LENGTH_SHORT)
    .apply { setGravity(Gravity.BOTTOM, 0, 0); show() }

참고 사항Gravity앱 대상이 최대 29개 이하인 경우에만 작동합니다.

진정제 :)

//사용자 정의 또는 기본 토스트를 원하는 대로 보여줄 수 있는 사용자 정의 토스트 클래스)

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

        }
Toast toast = Toast.makeText(this, "Custom toast creation", Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT,0,0);
    toast.show();

언급URL : https://stackoverflow.com/questions/2506876/how-to-change-position-of-toast-in-android

반응형