[Android] 開いた引き出しを右に押すとアクティビティ


Answers

ナビゲーション・ドロワーに沿ってアクティビティーをスライドさせるデフォルトの方法はありませんが、コードを使用して行うことができます。 mick88の上の答えで提案されているように、以下は私のプロジェクトのコードスニペットです。

私のprofile.xmlファイル

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <!-- Framelayout to display Fragments -->

    <RelativeLayout
        android:id="@+id/mainView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >


    </RelativeLayout>

    <!-- Listview to display slider menu -->

    <RelativeLayout
        android:id="@+id/drawerView"
        android:layout_width="240dp"
        android:layout_height="wrap_content"
        android:layout_gravity="start" >

        <ListView
            android:id="@+id/list_slidermenu"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/list_background"
            android:divider="@color/list_divider"
            android:dividerHeight="1dp" />
    </RelativeLayout>
</android.support.v4.widget.DrawerLayout>

活動中

public class ProfileActivity extends ActionBarActivity {
    ....
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mDrawerToggle;

    RelativeLayout drawerView;
    RelativeLayout mainView;
    ....

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        ............. //
        .............//
        drawerView = (RelativeLayout) findViewById(R.id.drawerView);
        mainView = (RelativeLayout) findViewById(R.id.mainView);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.app_name, R.string.app_name) {
            public void onDrawerClosed(View view) {
                supportInvalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                supportInvalidateOptionsMenu();
            }

            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                mainView.setTranslationX(slideOffset * drawerView.getWidth());
                mDrawerLayout.bringChildToFront(drawerView);
                mDrawerLayout.requestLayout();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

    }

}
Question

右からスライドするdrawerlayoutを実装しましたが、facebookのようなアクティビティをシフトしません(下の図を参照)。 上記のイメージのように、ユーザーがopendrawerボタンをタップすると、現在のアクティビティを右側にプッシュするにはどうすればよいですか?現在、アクティビティの上に表示され、影を落とします。 前もって感謝します。




OPに答えがありました。 しかし、その効果を望む誰かのために、 SlidingPaneLayoutを使用することができます。 この目的のために設計されています。

XMLファイルの場合:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SlidingPaneLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@id/mainFrame"
    style="@style/MP.mainFrame" >


    <!--****************************Right Pane ****************************-->
    <LinearLayout style="@style/searchLayout">
        <android.support.v4.widget.NestedScrollView style="@style/MP">
            <LinearLayout style="@style/MP.verticalLinearLayout">


            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>
    </LinearLayout>
    <!--****************************Right Pane ****************************-->

    <!--****************************Left Pane ****************************-->
<FrameLayout style="@style/MP.mainLayout">
    <LinearLayout android:id="@id/fragmentContainer" style="@style/MP.fragmentContainer"/>

    <android.support.v7.widget.Toolbar style="@style/toolbar">
        <ir.tooskar.excomponents.ExtendedTextView android:id="@id/appTitle" style="@style/WC.appTitle"/>
        <ir.tooskar.excomponents.ExtendedTextView android:id="@id/appBarSearchIcon" style="@style/WC.appBarSearchIcon"/>
    </android.support.v7.widget.Toolbar>
</FrameLayout>        <!--****************************Left Pane ****************************-->

左右に2つのペインがあり、一緒に動いて一緒に動く。 私にとって、左のペインはメインペイン、右はトグルアイコンで隠されて表示されます。 (idがappBarSearchIconのビュー)。

SlidingPaneLayoutという名前のビューグループが1つあり、 LeftとThe Rightという2 つの子しかないことに注意してください。

そして活動の重要な部分:

        slidingPaneLayout = (SlidingPaneLayout) findViewById(R.id.mainFrame);
//        Sets a color for covering left pane(Main Pane)
        slidingPaneLayout.setSliderFadeColor(ContextCompat.getColor(context, R.color.searchPaneFadeColor));

//        The listener for Opening the Right pane(Hidden pane)
        findViewById(R.id.appBarSearchIcon).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view){
                slidingPaneLayout.openPane();
            }
        });

右ペインを閉じることは、Navigation Drawerと同じように、APIによって行われます。




あなたの質問に答える。 DrawerLayoutは期待どおりに動作しています。

Slidingmenu(またはUmano)をDrawerLayout(私が行う)と組み合わせて使うことができます。

最後に、あなたが望むもの(そしてFacebookが何をしているか)について、Google自体はあなたがそれをしたくないと思う。 彼らはあなたがGoogle Musicでの使用方法と同じように引き出しを使用することを望みます(たとえば)

Googleの担当者が正確にこれを私に言った:

  • ナビゲーションドロワーは新しいガイドラインに準拠する必要があり、DrawerLayoutとActionBarDrawerToggleを使用して実装する必要があります。
  • ナビゲーション・ドロワーはアクション・バーを移動してはならず、画面の内容の上にオーバーレイとして表示されます。
  • ナビゲーションドロワーには、主要なナビゲーション要素のみが含まれている必要があります。 通常、設定バーや検索など、アクションバーに配置されるアイテムをナビゲーションドロワーに表示しないでください。 ブロッククォート

だからFacebookがやることはしないでください。 (それは他の文脈では良いアドバイスです):)