3

私は数日間問題に悩まされており、Google 検索では可能な解決策が枯渇し始めました。View を追加し、UndoBar ライブラリのように onTouch イベントまたは onClick イベントを受け取るクラスを作成しようとしています。問題は、View を WindowManager ではなく ViewGroup に追加しない限り、onTouch/onClick イベントが呼び出されないことです。以下は私の非動作コードです:

    final LayoutInflater mLayoutInflater = (LayoutInflater) 
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    final View mView = mLayoutInflater
            .inflate(R.layout.test, null);


    final TextView clickTextView = (TextView) 
            mView.findViewById(R.id.clickTextView);  


    WindowManager mWindowManager = (WindowManager)
            context.getSystemService(Context.WINDOW_SERVICE);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams();

    params.height = WindowManager.LayoutParams.WRAP_CONTENT;
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;

    params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

    params.format = PixelFormat.TRANSLUCENT;      
    params.type = WindowManager.LayoutParams.TYPE_TOAST;

    mWindowManager.addView(mView, params);

    clickTextView.setOnTouchListener(new OnTouchListener() 
    {

        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {

            Log.i("onTouch", "onTouch has been called");

            return false;

        }
    });

}

注意: ここで渡されるコンテキストはアクティビティ コンテキストです。

このコードを機能させるには、Activity のルート レイアウトを取得し、そこに View を追加する必要があります。私の質問は、初心者の質問かもしれませんが、代わりに WindowManager に追加された View のイベントの onTouch/onClick を取得できないのはなぜですか?

助けてくれてありがとう。

4

1 に答える 1

1

これを機能させるためのコードは次のとおりですが、それでも私の質問に対する説明は見つかりませんでした。

    final View mView = mLayoutInflater
            .inflate(R.layout.test, activityViewGroup, false);

    activityViewGroup.addView(mView);
于 2013-04-13T01:57:58.050 に答える