【问题标题】:How can I open Drawer Layout moving all the view and not just slide over?如何打开抽屉布局移动所有视图而不仅仅是滑过?
【发布时间】:2014-04-09 13:24:20
【问题描述】:

如何打开抽屉布局移动所有视图而不只是滑过?

例如,我们的想法是让菜单像 Facebook 而不是像 GMail。我一直在寻找信息,但没有找到任何东西。可以办到?抽屉布局可以吗?如何?

非常感谢。

【问题讨论】:

标签: android navigation-drawer drawerlayout


【解决方案1】:

如果您不想使用第三方库,您可以自己实现它,只需覆盖 ActionBarDrawerToggle 中的 onDrawerSlide。在那里,您可以根据抽屉的打开百分比来翻译框架布局视图。

代码示例:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
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"/>    

    <ListView android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"/>

</android.support.v4.widget.DrawerLayout>

在这里,覆盖 onDrawerSlide:

public class ConfigurerActivity extends ActionBarActivity 
{
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private FrameLayout frame;
    private float lastTranslate = 0.0f;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);
        frame = (FrameLayout) findViewById(R.id.content_frame);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.acc_drawer_open, R.string.acc_drawer_close) 
        {            
            @SuppressLint("NewApi")
            public void onDrawerSlide(View drawerView, float slideOffset)
            {
                float moveFactor = (mDrawerList.getWidth() * slideOffset);

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
                {
                    frame.setTranslationX(moveFactor);
                }
                else
                {
                    TranslateAnimation anim = new TranslateAnimation(lastTranslate, moveFactor, 0.0f, 0.0f);
                    anim.setDuration(0);
                    anim.setFillAfter(true);
                    frame.startAnimation(anim);

                    lastTranslate = moveFactor;
                }
            }
        };

        mDrawerLayout.setDrawerListener(mDrawerToggle);

        // ... more of your code
    }
}

由于 setTranslationX 在 pre-honeycomb android 版本中不可用,我使用 TranslateAnimation 来管理低版本设备。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    你正在使用的东西是导航抽屉,但你必须使用

    菜单抽屉##

    对于像 facebook 和 gmail 这样的菜单。

    我已经实现了它,这个链接将帮助你这样做。

    这里是a link

    这将告诉你制作菜单抽屉的所有步骤。

    如果有帮助,别忘了投票答案。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多