32

アプリケーションに NavigationDrawer を正常に実装しました。

私のアプリは、画面の左側に開くドロワーを表示します。

私の問題は、左側にボタンを追加する必要があることです。そのボタンをクリックまたはスワイプして、左の引き出しを開くことができます。私ができること。

しかし、ボタンは引き出しの一部のように見えるはずで、画面にはみ出します。

つまり、引き出しの開閉と同時にボタンがスライドする必要があります。

閉じた状態:

ここに画像の説明を入力

開状態

ここに画像の説明を入力

左の引き出しのレイアウトにボタンを追加してみましたが、境界の外に物を表示することはできないようで、引き出しを閉じると常に完全に非表示になります。

現在、メインの DrawerLayout にボタンを追加して、左の引き出しの右側に配置するように追加しようとしています...しかし、うまくいきません... DrawerLayout は 2 つ以上の子を持つことができないようです.. .

どんな助けでも大歓迎です。

サポート ライブラリ (v4) を使用しています

[編集] そして、私は API レベル 8 をサポートしていますImageView.setTranslationXView.OnAttachStateChangeListener

4

2 に答える 2

12

それはかなりトリッキーです。

これは、新しい Google マップ アプリのドロワー ハンドルに行われていることと似ていると思います。私の言葉を鵜呑みにしないでください。:)

Activityコンテンツ ビューの端にとどまるトグルを作成しました。がドラッグされると、最小の子 (コンテンツ ビュー) から影 (存在する場合) を引いたDrawerLayout量だけ x 軸上のビューを移動しました。DrawerLayoutキャストされた影 + のコンテンツ ビューにより、DrawerLayout引き出し全体の全測定幅が得られます。

スライドされたオフセットと最小の子をすばやく乗算し、x 変換を見つけます。

[編集: 読みやすくするためにコードを削除し、以下のリンクに移動しました]

あなたの活動で:

mDrawerToggle = new DrawerLayoutEdgeToggle(
    this, 
    mDrawerLayout, 
    R.drawable.ic_launcher, 
    R.drawable.ic_launcher,
    Gravity.LEFT, 
    true) {

        @Override
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view); //must call super
        }

        @Override
        public void onDrawerOpened(View view) {
            super.onDrawerOpened(view); //must call super
        }

        @Override
        public void onDrawerSlide(View view, float slideOffset) {
            super.onDrawerSlide(view, slideOffset); //must call super

        }
    };
mDrawerLayout.setDrawerListener(mDrawerToggle);

クリエイティビティ ブースト: ハンドルへのマージンとして設定できる ActionBar からの距離などの化粧品を追加できます。

また、Y 軸上で平行移動するだけでハンドルを左右に沿って上下に動かすことで、「シングル ジッパー効果」を模倣できます。:)

編集:こちらのGitHubで入手できます

編集2:ハンドルを取得できない場合は、最初に表示されますmDrawerToggle.setVerticalPostionOffset(0)

于 2013-08-19T03:15:37.807 に答える
6

Mobistryによって書かれたAniqroidライブラリのおかげで、これをかなり簡単に行う方法を見つけました(SO疑似)

Android SlidingDrawer のコピーである SlidingTray クラスを使用しますが、ドロワーを画面の隅に配置できます。

私はxml経由で要素を宣言しました

<com.sileria.android.view.SlidingTray 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="270dp"
    android:content="@+id/content"
    android:handle="@+id/handle" >

    <ImageView
        android:id="@+id/handle"
        android:layout_width="320dp"
        android:layout_height="24dp"
        android:background="@drawable/tray_btn" />

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="fill_vertical"
        android:orientation="vertical" >
    </LinearLayout>

</com.sileria.android.view.SlidingTray>

そして、ちょうど電話しなければならなかった

Kit.init(this);

Activityレイアウトを膨らませる前に私のメインで。

aniqroid開発者に感謝します!

https://code.google.com/p/aniqroid/

于 2013-08-26T07:31:46.917 に答える