сделать основной раздел контента активным в DrawerLayout
2466 просмотра
2 ответа
Как сделать активной область основного контента, пока ящик открыт. В настоящее время, если щелкнуть основную область содержимого, ящик будет закрыт, затем событие касания будет отброшено, я хочу перехватить это событие касания и передать его в область основного содержимого.
Автор: user1831986 Источник Размещён: 13.11.2019 11:33Ответы (2)
5 плюса
Вам нужно создать пользовательские 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;
}
Автор: SocialError
Размещён: 12.09.2013 06:39
4 плюса
Я решил свою проблему с временным решением, не таким элегантным, но какое-то время выполняет работу, возможно, содержит побочные эффекты. Я всегда возвращаюсь 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;
}
}
Автор: user1831986
Размещён: 12.09.2013 05:31
Вопросы из категории :
- android Насколько хорошо отражает эмулятор Android Phone?
- android Как сохранить состояние активности Android с помощью сохранения состояния экземпляра?
- android Android: доступ к дочерним представлениям из ListView
- android Как вызвать SOAP веб-сервис на Android
- android Как вы форматируете дату и время в Android?
- android Android: Получение имени файла с камеры?
- navigation-drawer Навигационный ящик: устанавливается как всегда открытый на планшетах
- navigation-drawer Как открыть навигационный ящик без панели действий, открыть с помощью одной кнопки
- navigation-drawer ClassCastException android.widget.FrameLayout $ LayoutParams для android.support.v4.widget.DrawerLayout $ LayoutParams
- navigation-drawer DrawerLayout застрял в салфетки
- navigation-drawer NavigationDrawer ListView не отображается
- navigation-drawer SeekBar в NavigationDrawer
- drawerlayout DrawerLayout.openDrawer не работает с первого раза
- drawerlayout сделать основной раздел контента активным в DrawerLayout
- drawerlayout Ошибка надувания класса android.support.v4.widget.drawerlayout
- drawerlayout java.lang.ClassCastException: android.widget.LinearLayout $ LayoutParams нельзя привести к android.widget.FrameLayout