4

ウィンドウの特定のレイアウトに OnTouchListener を持つ動的に作成されたオーバーレイ ウィンドウがあります。OnTouchListener でタッチを検出したら、このオーバーレイ ウィンドウを削除したいと考えています。このオーバーレイは動的に作成され、アクティビティの一部ではないため、アクティビティのライフサイクルに従わないため、finish() を呼び出すことができません。ビューを削除するにはどうすればよいですか?以下のコード スニペットは、View を作成する場所と、OnTouchListener がある場所です。オーバーレイを削除するにはどうすればよいですか?

    params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            flags,
            PixelFormat.TRANSLUCENT);
    LinearLayout l = new LinearLayout(service);
    RelativeLayout mainView = new RelativeLayout(service);
    RelativeLayout.LayoutParams param_one = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    param_one.leftMargin=0;
    param_one.topMargin=0;
    l.setTag("first_tag");
    l.setOrientation(LinearLayout.VERTICAL);
    l.setBackgroundColor(0x00ffffff);

    EditText second_test = new EditText(service);
    second_test.setBackgroundColor(Color.parseColor("#0b0b0b")); //TODO: not perfect color
    second_test.setTextColor(Color.LTGRAY);
    second_test.setWidth(440);
    second_test.setTag("second_tag");
    second_test.setTextSize(20);
    LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    second_test.setLayoutParams(llp);
    l.addView(second_test);
    mainView.addView(l, param_one);

    LinearLayout bottomLayout = new LinearLayout(service);
    RelativeLayout.LayoutParams bottomparam = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    bottomparam.width=700;
    bottomparam.height=120;
    bottomparam.leftMargin=10;
    bottomparam.topMargin=260;
    bottomLayout.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.d(TAG, "onTouch");
            // Remove the overlay here
            return true;
        }
    });
    mainView.addView(bottomLayout, bottomparam);

WindowManager.removeView(thisView) を呼び出そうとしましたが、onCreate() の前にアクティビティで WindowManager などのシステム サービスを使用できません。

4

0 に答える 0