Не удается получить события движения с Window.Callback - PullRequest
6 голосов
/ 19 марта 2019

Моя задача - получать все события движения в приложении Android с хорошим внедрением (вариант библиотеки) Я создаю свою оболочку Window.Callback.

public class WindowCallback implements Window.Callback {

private final Window.Callback wrapper;

    public WindowCallback(Window.Callback callback) {        
        this.wrapper = callback;
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
         return wrapper.dispatchKeyEvent(event);
    }

    @Override
    public boolean dispatchKeyShortcutEvent(KeyEvent event) {
         return wrapper.dispatchKeyShortcutEvent(event);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {        
        return wrapper.dispatchTouchEvent(event);
    }

    // other methods omitted
}

Затем создайте его экземпляр в Activity:

final Window window = getWindow();
final Window.Callback windowCallback = window.getCallback();
final WindowCallback callbackWrapper = new WindowCallback(windowCallback);
window.setCallback(interceptCallback);

Но когда у меня Toolbar в Activity, это Toolbar захватывает Window.Callback в методе setActionBar(Toolbar) или setSupportActionBar(Toolbar). Фрагмент кода из рамки Activity:

if (toolbar != null) {
        final ToolbarActionBar tbab = new ToolbarActionBar(toolbar, getTitle(), this);
        mActionBar = tbab;
        mWindow.setCallback(tbab.getWrappedWindowCallback());

и ToolbarActionBar из библиотеки поддержки:

ToolbarActionBar(Toolbar toolbar, CharSequence title, Callback windowCallback) {
    this.mDecorToolbar = new ToolbarWidgetWrapper(toolbar, false);
    this.mWindowCallback = new ToolbarActionBar.ToolbarCallbackWrapper(windowCallback);
    this.mDecorToolbar.setWindowCallback(this.mWindowCallback);
    toolbar.setOnMenuItemClickListener(this.mMenuClicker);
    this.mDecorToolbar.setWindowTitle(title);
}

Вопрос в том - как проверить, когда Toolbar поймать Window.Callback, но без создания базовой активности и выхода из нее. Эта проверка должна выполняться не очень часто. (OnGlobalLayoutListener не наш случай)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...