[英]Navigation drawer on right side not staying open
我正在使用右側的NavigationDrawer
來顯示一些過濾器。 問題是右邊的抽屜只做一個投擲手勢時保持打開狀態。 如果我將gravity屬性更改為start
或left
,則它會保持正常打開狀態。 我認為正常情況是緩慢拖動然后放手將保持抽屜打開。 右側有抽屜,似乎對閉合位置有偏差。
難道我做錯了什么? 有沒有辦法讓它正常滑動? 我的用戶很難搞清楚他們需要扔掉以保持抽屜打開。
使用支持庫。
需要投擲:
<LinearLayout
android:id="@+id/filtersDrawer"
android:layout_width="200dp"
android:layout_height="fill_parent"
android:layout_gravity="end"
android:background="@color/drawer_color"
android:orientation="vertical" >
不需要扔掉:
<LinearLayout
android:id="@+id/filtersDrawer"
android:layout_width="200dp"
android:layout_height="fill_parent"
android:layout_gravity="start"
android:background="@color/drawer_color"
android:orientation="vertical" >
謝謝!
我覺得我已經提出了正確的邏輯來解決股票實施中的不足。
drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
/**
* percentage of its width that the drawer needs to be open to
* trigger a toggle (between 0 and 1).
**/
private static final float TOGGLE_OFFSET = 0.3f;
private float lastSlideOffset;
private boolean isDragging;
@Override
public void onDrawerSlide(View view, float slideOffset) {
lastSlideOffset = slideOffset;
}
@Override
public void onDrawerOpened(View view) {}
@Override
public void onDrawerClosed(View view) {}
@Override
public void onDrawerStateChanged(int newState) {
switch (newState) {
case DrawerLayout.STATE_DRAGGING:
isDragging = true;
break;
case DrawerLayout.STATE_IDLE:
isDragging = false;
break;
case DrawerLayout.STATE_SETTLING:
if (isDragging) {
attemptToggle();
}
break;
}
}
private void attemptToggle() {
if (drawerLayout.isDrawerOpen(Gravity.END)) {
if (lastSlideOffset <= 1 - TOGGLE_OFFSET) {
drawerLayout.closeDrawer(Gravity.END);
} else {
drawerLayout.openDrawer(Gravity.END);
}
} else {
if (lastSlideOffset >= TOGGLE_OFFSET) {
drawerLayout.openDrawer(Gravity.END);
} else {
drawerLayout.closeDrawer(Gravity.END);
}
}
}
});
您可以通過使用偵聽器並在用戶拖動一定百分比時強制打開/關閉抽屜,然后釋放抽屜來解決此問題,如下所示:
mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
private float mLastOffset;
@Override
public void onDrawerSlide(View view, float slideOffset) {
mLastOffset = slideOffset;
}
@Override
public void onDrawerOpened(View view) {
}
@Override
public void onDrawerClosed(View view) {
}
@Override
public void onDrawerStateChanged(int newState) {
if (newState == DrawerLayout.STATE_SETTLING) {
if (mLastOffset > 0.5f) {
mDrawerLayout.openDrawer(Gravity.END);
} else {
mDrawerLayout.closeDrawer(Gravity.END);
}
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.