Android Klicken Sie sich durch PopupWindow

Ich habe eine Klasse erstellt, die das Popup-Fenster erweitert. Der Konstruktor sieht ungefähr so aus

super(builder.context.get());

this.setWindowLayoutMode(ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT);
setFocusable(true);
setBackgroundDrawable(new BitmapDrawable());
setTouchInterceptor(onTouchListener);
FrameLayout frameLayout = new FrameLayout(builder.context.get());
LayoutInflater inflater = (LayoutInflater) builder.context.get().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE);
View overlayBase = inflater.inflate(R.layout.tutorial_view_items, null, false);
frameLayout.addView(builder.backgroundView);
frameLayout.addView(overlayBase);
setContentView(frameLayout);

Der onTouchListener sieht folgendermaßen aus:

private OnTouchListener onTouchListener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        float x = event.getX();
        float y = event.getY();
        Log.d(TAG, "Received");

        if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(radius, 2)) {
            Log.d(TAG, "bubbled through");
            return false;
        }
        return true;
    }
};

Um das Popup-Fenster tatsächlich anzuzeigen, rufe ich anSomePopupWindow.showAtLocation(SomeActivity.getWindow().getDecorView().getRootView(), Gravity.CENTER, 0, 0);

Visuell dargestellt ist hier das betreffende Produkt

Der touchListener antwortet, aber die Eingabe wird nicht an die zugrunde liegende Aktivität gesendet ODER an das Popup-Fenster? (Der Knopf reagiert nicht, als würde ich den Ontouchlistener entfernen, der Knopf funktioniert einwandfrei).

aktualisieren Wenn ich den Touch-Listener auf FrameLayout (d. h. die Inhaltsansicht des Popup-Fensters in diesem Fall) anstelle des Popup-Fensters selbst setze, kann ich auf die im Popup definierten Schaltflächen klicken. Ich suche noch nach einer Möglichkeit, das Berührungsereignis an die zugrunde liegende Aktivität / Ansicht zu delegieren

LÖSUNG

Registrieren Sie einen Touch Interceptor für das Popup-Fenster. Wenn Sie möchten, dass die Aktivität sie verarbeitet, und davon ausgeht, dass Sie einen Verweis auf die Aktivität haben, rufen Sie ansomeActivity.dispatchTouchEvent(someMotionEventPassedIntoTheTouchIntercepter);Rufen Sie an, wenn das Popup-Fenster die Berührung selbst verarbeiten sollsomeView.dispatchTouchEvent(theMotionEventPassedToTouchInterceptor) zum Popup-FensterInhaltsansicht, wie in den Popupfenstern eingestelltsetContentView(someView) Methode.

Meine Methode sah speziell wie folgt aus

private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
    public boolean onTouch(View v, MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(
                radius, 2)) {
            activity.get().dispatchTouchEvent(event);
            return false;
        }
        frameLayout.dispatchTouchEvent(event);
        return true;
    }
};

Antworten auf die Frage(2)

Ihre Antwort auf die Frage