Jfeinstein10によるスライドメニュー( https://github.com/jfeinstein10/SlidingMen )の場合、アプリ内のどこにでもスライドしてメニューをスライドして開くことができます。
Googleで新しく導入されたナビゲーションドロワー http://developer.Android.com/design/patterns/navigation-drawer.html#side-nav の場合、同様の動作をさせる方法はありますか?
これまでのところ、ドキュメントから見ると、Edgeからスライドするか、アプリのアイコンに触れるだけに制限されていることがわかりました。
ユーザーは、画面の左端からスワイプするか、アクションバーのアプリケーションアイコンをタッチして、ナビゲーションドロワーを画面に表示できます。
解決策を見つけました。タッチマージンを構成して、ビューと同じ幅にすることができます。こちらがリンクです
Android Navigation Drawer のドラッグマージンを設定します
グーグルは、彼らが彼らのチュートリアル「ユーザーが画面の左端(左から20 dp以内)に触れた場合」の言い方から、彼らはその機能を望んでいないようです。
http://developer.Android.com/design/patterns/navigation-drawer.html を参照してください
「ユーザーは、画面の左端からスワイプするか、アクションバーのアプリケーションアイコンをタッチして、ナビゲーションドロワーを画面に表示できます。」
画面のどこからでも発言したり、スワイプしたりすることはありません。また、アプリ(G +、Gmailなど)にはその機能がないため、その機能が必要な場合は、独自に(ジェスチャーを使用して)またはサードパーティ(jfeinstein10など)を使用することをお勧めします。
編集:Youtubeアプリではどこでもスワイプできますが、少なくとも私が持っているバージョン(4.5.17)では、新しいAPIを使用しているようには見えません。
これを使えます
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Field mDragger = mDrawerLayout.getClass().getDeclaredField(
"mLeftDragger");//mRightDragger or mLeftDragger based on Drawer Gravity
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 * 3);
他の人が言ったように、そしてチェイニーは彼の答えで言ったように-それは意図されたままにしておくことがおそらく最善です。ただし、DrawerLayout
はSlidingMenu
とは異なるスタイルです。 Googleはまた、SlidingPaneLayout
を追加しました。これは、SlidingMenuのスタイルにより厳密に一致します。
結局のところ、私が探していたものの方が多かったため、SlidingPaneLayout
をこの方法で実装することになりました。 (これは、YouTube /ハングアウトアプリのスタイルでもあります)
<Android.support.v4.widget.SlidingPaneLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/sliding_pane_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:id="@+id/left_pane"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
<FrameLayout
Android:id="@+id/content_frame"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"/>
</Android.support.v4.widget.SlidingPaneLayout>
次に、アクションバーのホームボタンで開くには:
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action buttons
switch(item.getItemId()) {
case Android.R.id.home:
if (mPaneLayout.isOpen())
mPaneLayout.closePane();
else
mPaneLayout.openPane();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
その後、スライドする/開く/閉じるときに処理するPanelSlideListener
を実装できます。
ナビゲーションドロワーでAdam Powellのシリーズも読むことをお勧めします。パート3では、SlidingPaneLayoutとナビゲーションドロワーの使い方を説明します。
パート1- https://plus.google.com/+AdamWPowell/posts/2zi4DXd3jkm
パート2- https://plus.google.com/+AdamWPowell/posts/VdgexsZeXHW
パート3- https://plus.google.com/+AdamWPowell/posts/8j2GVw72i1E
GestureDetector
を使用してスライドジェスチャーを自分で検出し、 DrawerLayout.openDrawer()
メソッドを使用してナビゲーションドロワーを自分で開くだけです。