Search code examples
androidoverlaywindow-managerssystem-alert-window

how to make overlay window touchable


i'm making a feature in my app that display an overlay window with text on the screen, when it appears then i try to touch that window it actually touches behind that window i need to make that window touchable , which params should i use ? here is my code

        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        LayoutInflater screenNotificationInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        layOverTopviewNotification =  screenNotificationInflater.inflate(R.layout.layout_notification, null);
        TextView layOverText = (TextView) layOverTopviewNotification.findViewById(R.id.notification_layout);
        layOverText.setText(athkarString[completed]);

        params = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
        params.x = 0;
        params.y = 0;
        params.gravity = Gravity.TOP;
        windowManager.addView(layOverTopviewNotification, params);

Solution

  • I finally found an answer.

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    
    inflater = LayoutInflater.from(PlayAthkarService.this);
    
    textView = new TextView(PlayAthkarService.this);
    textView.setBackgroundResource(R.drawable.floating_window);
    textView.setTextSize(20);
    textView.setText(athkarString[completed]);
    textView.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        params = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
            , WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.OPAQUE);
    }else {
        params = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
                , WindowManager.LayoutParams.TYPE_PRIORITY_PHONE,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.OPAQUE);
    }
    
    params.gravity = Gravity.TOP | Gravity.RIGHT ;
    params.x = 0;
    params.y = 50;
    
    windowManager.addView(textView, params);