Androidでトーストの位置を変更する方法は?


279

を使用Toastして画面にポップアップテキストを表示すると、デフォルトの位置である画面下部の少し上にテキストが表示されます。

画面の真ん中か、選択した場所に表示したいと思います。

これを達成する方法を誰かが私に案内できますか?

回答:


410

ドキュメントから、

トーストの配置

画面の下部近くに、水平方向の中央に標準のトースト通知が表示されます。setGravity(int, int, int)メソッドでこの位置を変更できます 。これは、Gravity定数、x-positionオフセット、オフセットの3つのパラメーターを受け入れます y-position

たとえば、トーストを左上隅に表示する場合は、次のように重力を設定できます。

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

位置を右に微調整する場合は、2番目のパラメーターの値を増やします。下に移動するには、最後のパラメータの値を増やします。


11
そこの整数値は何ですか?彼らはdpiですか?または最大は何ですか?
clifgray 2013年

9
当たり前のことを指摘しているかもしれませんがGravity.CENTER_VERTICAL、トーストを画面の中央に配置します。
Felix

3
xとyのオフセットはピクセル単位なので、最大値はディスプレイの幅/高さです。
bluewhile 2013年

2
@ Pentium10ドキュメントには、オフセットはピクセル単位であると記載されています。これらは「dp」単位ではなく「px」単位であると想定する必要がありますか?
batbrat

新しいGalaxy s6のトーストメッセージは、2つの異なる位置に表示されます。最初は左の水平方向の中央の垂直線、次に中央の水平線、下の垂直線に移動します。この影響は、私の古いテストデバイスでは発生しません。任意の画面タップがすぐ最初トーストを殺すので、私は2回連続で各メッセージを表示し、。
Androidcoder

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 2012年

1
「makeTextを呼び出す必要があることを示すエラーが発生した場合 -エラーはいつ表示されますか?
Jacek Laskowski 2013年

1
new Toast(context)代わりにコンストラクタを使用すると、エラーが発生しますToast.makeText(...)
bluewhile

16

以下を使用して、トーストの場所をカスタマイズできます。

setGravity(int gravity, int xOffset, int yOffset)

docs

これにより、トーストの場所を特定することができます。

xOffsetおよびyOffsetパラメーターについて最も有用なことの1つは、特定のビューを基準にしてトーストを配置するために使用できることです。

たとえば、ボタンの上に表示されるカスタムトーストを作成する場合は、次のような関数を作成できます。

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

これは良い例です。ありがとう。
wonsuc 2017

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

上記のコードは、トーストを画面の中央に表示したり、必要に応じてトーストの重力を設定したりするためのウルの選択に従って表示するのに役立ちます

注:このプロセスでは、トーストのオブジェクトを使用する必要があります


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 2017年

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.