Android Нажмите Через PopupWindow
Я создал класс, который расширяет всплывающее окно. его конструктор выглядит примерно так
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);
onTouchListener выглядит следующим образом:
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;
}
};
чтобы на самом деле отобразить всплывающее окно, я звонюSomePopupWindow.showAtLocation(SomeActivity.getWindow().getDecorView().getRootView(), Gravity.CENTER, 0, 0);
Наглядно представлен, вот продукт, о котором идет речь
TouchListener отвечает, но ввод не отправляется в основное действие ИЛИ во всплывающее окно? (кнопка не отвечает, где, как если бы я должен был удалить сенсорный сенсор, кнопка работает нормально).
Обновить установка сенсорного слушателя на frameLayout (то есть представление содержимого popupwindow в данном случае) вместо самого popupwindow позволяет мне нажимать кнопки, определенные во всплывающем окне. по-прежнему ищет способ делегировать событие касания в основное действие / представление
РЕШЕНИЕ
Зарегистрируйте сенсорный перехватчик для всплывающего окна. Если вы хотите, чтобы действие обрабатывало его, предполагая, что у вас есть ссылка на действие, позвонитеsomeActivity.dispatchTouchEvent(someMotionEventPassedIntoTheTouchIntercepter);
, если вы хотите, чтобы всплывающее окно обрабатывало даже прикосновение, позвонитеsomeView.dispatchTouchEvent(theMotionEventPassedToTouchInterceptor)
к всплывающему окнупросмотр содержимого, как установлено во всплывающих окнахsetContentView(someView)
метод.
Мой метод специально выглядел следующим образом
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;
}
};