web-dev-qa-db-ja.com

Android Navigation Drawerのドラッグマージンを設定します

アプリで新しいナビゲーションドロワーを使用しています。引き出しの開き方を簡単に設定する方法が見つからなかった以外は、すばらしいことです。デフォルトの動作では、画面の左端からドラッグして開きます。電話/テーブルにケースがあり、電話の端に触れることができない場合を除き、これは問題ありません。ユーザーがタッチして画面の余白から左にドラッグできるようにしたいと思います。これは、他のナビゲーションドロワーライブラリ(スライドライブラリ)で簡単に設定できます。残念ながら、Googleのlibには何も見ていません。

使用できるNavigationLayoutのonTouchEvent()メソッドがあります。もちろん、すべてのタッチイベントをリッスンしてopenDrawerをトリガーできますが、より少ないコードで簡単な方法を望んでいました。何か案は?

32
Patrick

ここで私は反射を介して解決策を見つけました

DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Field mDragger = mDrawerLayout.getClass().getDeclaredField(
        "mLeftDragger");//mRightDragger for right obviously
mDragger.setAccessible(true);
ViewDragHelper draggerObj = (ViewDragHelper) mDragger
        .get(mDrawerLayout);

Field mEdgeSize = draggerObj.getClass().getDeclaredField(
        "mEdgeSize");
mEdgeSize.setAccessible(true);
int Edge = mEdgeSize.getInt(draggerObj);

mEdgeSize.setInt(draggerObj, Edge * 5); //optimal value as for me, you may set any constant in dp
65
Maxim Efimov