Моя задача - получать все события движения в приложении 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
не наш случай)