22

jfeinstein10 ( https://github.com/jfeinstein10/SlidingMenu ) によるスライド メニューの場合、アプリ内の任意の場所をスライドして、メニューをスライドして開くことができます。

Google が新しく導入したナビゲーション ドロワーhttp://developer.android.com/design/patterns/navigation-drawer.html#side-navの場合、同様の動作をさせる方法はありますか?

これまでのところ、ドキュメントから、端からスライドするか、アプリのアイコンに触れるだけに制限されていることがわかりました。

ユーザーは、画面の左端からスワイプするか、アクション バーのアプリケーション アイコンをタッチして、ナビゲーション ドロワーを画面に表示できます。

4

5 に答える 5

11

Google、彼らのチュートリアルの言い方から、「ユーザーが画面の左端に触れた場合 (左から 20 dp 以内)」、彼らはその機能を望まないようです。

http://developer.android.com/design/patterns/navigation-drawer.htmlを参照してください

「ユーザーは、画面の左端からスワイプするか、アクション バーのアプリケーション アイコンをタッチすることで、ナビゲーション ドロワーを画面に表示できます。」

彼らは画面のどこからでも言ったりスワイプしたりしません。また、どのアプリ (G+、Gmail など) にもその機能がないため、その機能が必要な場合は、独自の (ジェスチャーを使用して) またはサード パーティ (jfeinstein10 など) を作成する必要があります。

編集: Youtube アプリではどこでもスワイプできますが、少なくとも私が持っているバージョン (4.5.17) では、新しい API を使用しているようには見えません。

于 2013-06-17T16:18:22.403 に答える
6

これを使用できます

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); 
于 2013-11-04T09:19:57.140 に答える
3

他の人が言ったように、そしてチェイニーが彼の答えで言ったように、意図したとおりにしておくのがおそらく最善です。ただし、 はDrawerLayoutとはスタイルが異なりSlidingMenuます。GoogleSlidingPaneLayoutは、SlidingMenu のスタイルにより近いものも追加しました。

SlidingPaneLayout結局、それは私が探していたものであったため、この方法でa を実装することになりました。(これは 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 と Navigation Drawer の使用について説明します。

パート 1 - https://plus.google.com/+AdamWPowell/posts/2zi4DXd3jkm

パート 2 - https://plus.google.com/+AdamWPowell/posts/VdgexsZeXHW

パート 3 - https://plus.google.com/+AdamWPowell/posts/8j2GVw72i1E

パート 4 - https://plus.google.com/+AdamWPowell/posts/TtBFUXhe5HU

于 2013-06-17T17:19:58.417 に答える
2

を使用してスライド ジェスチャを自分で検出し、メソッドGestureDetectorを使用してナビゲーション ドロワーを自分で開くことができます。DrawerLayout.openDrawer()

于 2013-06-11T18:09:53.110 に答える