打开抽屉时,在右侧推动活动

jas*_*son 37 android facebook navigation-drawer

我已经实现了从右侧滑动的drawerlayout,但它并没有像facebook那样改变活动(见下图).当用户点击上面的图像中的opendrawer按钮时,如何将当前活动推到右侧.目前它出现在活动之上并且掉落阴影.我非常感谢任何帮助.提前致谢.

在此输入图像描述

小智 68

虽然没有默认方式将活动与导航抽屉一起滑动,但我们可以通过代码完成.正如上面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>
Run Code Online (Sandbox Code Playgroud)

现在在活动中

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);

    }

}
Run Code Online (Sandbox Code Playgroud)


mic*_*k88 26

建议不要这样做,但您可以通过编程方式移动布局:

@Override
public void onDrawerSlide(View drawerView, float offset) {
    View container = findViewById(R.id.container);
    container.setTranslationX(offset * drawerView.getWidth());
}
Run Code Online (Sandbox Code Playgroud)


pan*_*ini 9

我不认为你可以用股票实现它DrawerLayout,但是SlidingMenu你可以,这里的GitHub回购应该解释你需要的一切


Mar*_*ini 8

回答你的问题.DrawerLayout的行为符合预期.

你可以将Slidingmenu(或Umano)与DrawerLayout(我这样做)结合使用.

最后,关于你想要什么(以及Facebook做什么),谷歌本身并不希望你这样做.他们希望您像在Google音乐中一样使用抽屉(例如)

谷歌联系人对我说:

  • 抽屉式导航栏应按照新的指导方针,并应落实使用DrawerLayout和ActionBarDrawerToggle.
  • 导航抽屉不应移动操作栏,并应显示为屏幕内容上方的叠加层.
  • 导航抽屉应仅包含主要导航元素.避免在导航栏中显示通常放在操作栏中的项目,例如"设置"或"搜索".大段引用

所以不要做Facebook所做的事情.(在任何其他情况下,这是一个很好的建议):)


小智 7

这真的很有帮助.将此代码段放在MainActivity.java中

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
 @Override
 public void onDrawerSlide(View drawerView, float slideOffset) {
    super.onDrawerSlide(drawerView, slideOffset);
    containerFrame.setTranslationX(slideOffset * drawerView.getWidth());
    drawerLayout.bringChildToFront(drawerView);
    drawerLayout.requestLayout();
    //below line used to remove shadow of drawer
    drawerLayout.setScrimColor(Color.TRANSPARENT);
}//this method helps you to aside menu drawer
};
Run Code Online (Sandbox Code Playgroud)