Как сделать активную основную область содержимого, в то время как ящик открыт. В настоящее время, если нажата основная область содержимого, ящик будет закрыт, а затем событие touch будет удалено, я хочу поймать это событие касания и передать его в основную область содержимого.сделать основной контент активным в DrawerLayout
ответ
Вам необходимо создать пользовательские DrawerLayout и @overide onInterceptTouchEvent
. Затем вы можете создать некоторый метод регистрации видов ящиков (например, setDrawerViewWithoutIntercepting
), для которых можно будет использовать (нажмите) основное содержимое, когда оно открыто. Вы должны вызвать этот метод в своей деятельности/фрагменте, где используется этот DrawerLayout.
OnInterceptTouchEvent будет возвращать false только в том случае, если зарегистрированный вид выдвижного ящика открыт, а касания находятся за пределами области обзора ящика. Это означает, что все функции остаются неизменными (например, закрытие ящика с использованием прокрутки и т. Д.)
Это просто пример, который следует улучшить, поэтому я надеюсь, что это вам поможет.
private View currentDrawerView;
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = super.onInterceptTouchEvent(event);
if (currentDrawerView != null && isDrawerOpen(currentDrawerView)) {
DrawerLayout.LayoutParams layoutParams = (DrawerLayout.LayoutParams) currentDrawerView.getLayoutParams();
if (layoutParams.gravity == Gravity.RIGHT) {
if (event.getX() < currentDrawerView.getX()) {
result = false;
}
}
else if (layoutParams.gravity == Gravity.LEFT) {
if (event.getX() > currentDrawerView.getX() + currentDrawerView.getWidth()) {
result = false;
}
}
// ......
};
return result;
}
public void setDrawerViewWithoutIntercepting(View view) {
this.currentDrawerView = view;
}
Я решил проблему с временным решением, не так изящным, но делает работу некоторое время, возможно, содержит побочные эффекты. Я всегда возвращаю false
в onInterceptTouchEvent(), и все работает каждый раз.
public class CustomDrawerLayout extends DrawerLayout {
public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomDrawerLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomDrawerLayout(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// always false and event will be send to each view
return false;
}
}
- 1. Android DrawerLayout не показывает основной контент
- 2. Drawerlayout слайд-контент вместо меню
- 3. Сделать окно JavaFX активным
- 4. Как сделать основной контент перед фоном в середине?
- 5. Сделать входной виджет активным
- 6. Как сделать андроид активным?
- 7. Сделать Tkinter Toplevel активным
- 8. Сделать меню в javascript активным?
- 9. Сделать вкладку активным в Bootstrap
- 10. Сделать div активным
- 11. Слушатель и конфигурация DrawerLayout
- 12. Как сделать основной контент посередине страницы и удалить белые пробелы?
- 13. Как сделать основной контент div заполнять высоту экрана css
- 14. Как сделать контроллер View активным с быстрым?
- 15. в пользовательских drawerlayout, как сделать NavigationView перетаскиваемым
- 16. Получить основной контент из url
- 17. Android перемещает основной контент, чтобы выявить правую сторону ящика
- 18. Как сделать многословный режим активным?
- 19. Как сделать определенное окно активным
- 20. Vue.js сделать пункт меню активным
- 21. Сделать li активным через javascript
- 22. Как сделать инвертор андроида активным?
- 23. Как сделать RibbonApplicationMenuBar неактивным/активным?
- 24. Сделать md-tooltip всегда активным?
- 25. Сделать UITextField активным при загрузке
- 26. Сделать текущий процесс активным Окно
- 27. Android переместить основной контент, чтобы показать ящик
- 28. Сделать элемент navbar активным в шаблоне Django
- 29. Как сделать общий объект активным в Android?
- 30. Как сделать окно активным в vb.net
Спасибо .. !! Это решает мою проблему :) –
отлично работает. –