33

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

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

4

1 に答える 1

69

ここで、反射による解決策を見つけました

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
于 2013-07-23T06:06:20.270 に答える