0

トースト メッセージのカスタム背景を作成しました。MotionEvent を使用して rawX と rawY を取得し、ユーザーがタップしたトーストを表示します。唯一の問題は、トーストの上部がユーザーのタッチ ポイントの上ではなく下に表示されることです。基本的に、Toast を表示するときに Toast の高さを知っていれば、それを Y 軸上に移動できるので、ユーザーが x、y ポイントをタップするよりも上になります。ただし、Toast が描画される前に Toast の高さを取得することはできません。そうでなければ、Gravity パラメータで正しい位置を達成する別の方法はありますか?

        //Retrieve the layout inflator
        LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //Assign the custom layout to view
        //Parameter 1 - Custom layout XML
        //Parameter 2 - Custom layout ID present in linearlayout tag of XML
        View layout = inflater.inflate(R.layout.popup_toast,
                    (ViewGroup) llayParent.findViewById(R.id.popToastLayoutRoot));


        m_tv_what = (TextView)layout.findViewById(R.id.ptextWhat);
        m_tv_priority = (TextView)layout.findViewById(R.id.ptextPrior);
        m_tv_where  = (TextView)layout.findViewById(R.id.ptextWhere);
        m_tv_notes = (TextView)layout.findViewById(R.id.ptextNotes);

        m_tv_what.setText(row.sSubject);
         switch((int)row.lPriority){
            case 3:
                m_tv_priority.setText("low");
            break;

            case 2:
                m_tv_priority.setText("medium");
            break;

            case 1:
                m_tv_priority.setText("HIGH");
            break;

         }
         m_tv_where.setText(row.sWhere);
         m_tv_notes.setText(row.sDescription);



        //Return the application context
        Toast toast = new Toast(ctx);
        //Set toast gravity to bottom

             //the height is 0 of course , because it has not been drawn yet
             //any way to get height?
            int height =layout.getHeight();

             toast.setGravity(Gravity.TOP|Gravity.LEFT ,(int)x, (int)y );
        //Set toast duration
        toast.setDuration(Toast.LENGTH_LONG);
        //Set the custom layout to Toast
        toast.setView(layout);
        //Display toast
        toast.show();
4

2 に答える 2

1

setGravity() メソッドを使用する必要があります。最初にユーザーのタッチの座標を取得してから、次のようなことを試してください。

toast.setGravity(Gravity.TOP|Gravity.LEFT, x, y);

ここで、x と y は左上隅から始まる x 座標と y 座標のオフセットで、重力は定数です。

于 2013-07-18T20:01:24.750 に答える