【问题标题】:Material design drawer材料设计抽屉
【发布时间】:2015-05-14 20:10:01
【问题描述】:

我遇到了一个小问题。

当我们启动应用程序时,如何让抽屉已经打开(就像一个静态菜单,但可以在我们按下箭头按钮时关闭它)? 我们有这个菜单:

https://github.com/kanytu/android-material-drawer-template

以及样品现在的样子:

【问题讨论】:

  • 你不能在加载时触发javascript中的点击事件吗?我不确定这些东西是如何发展到如此程度的。
  • @Jackhardcastle 我猜这是 Java,而不是 javascript。
  • @jail4me,请在您的应用程序中设置抽屉的位置包含您的代码...
  • @2Dee 我可能误会了你你在说这个吗?
  • 您有时间尝试我的解决方案吗?

标签: java android menu navigation-drawer material-design


【解决方案1】:

好的,由于您使用的是NavigationDrawerFragment,您可能缺少mUserLearnedDrawer 属性和相关行为。基本上,这个想法是在抽屉第一次打开时在SharedPreferences 中保存一个属性,并在每次调用setup() 时检查该属性,这样您就知道是否需要第一次为用户打开抽屉。看看代码here。我在这里复制setup() 方法以防链接失效:

public void setUp(int fragmentId, DrawerLayout drawerLayout, NavigationDrawerAdapter adapter, AvatarLoader avatar,
    User user) {
    mFragmentContainerView = getActivity().findViewById(fragmentId);
    mDrawerLayout = drawerLayout;
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

    avatar.bind(userImage, user);
    userName.setText(user.getLogin());

    String name = user.getName();
    if (name != null) {
        userRealName.setText(user.getName());
    } else {
        userRealName.setVisibility(View.GONE);
    }

    mDrawerListView.setAdapter(adapter);
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);

    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(
        getActivity(), mDrawerLayout,
        R.string.navigation_drawer_open,
        R.string.navigation_drawer_close) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            if (!isAdded()) {
                return;
            }

            getActivity().supportInvalidateOptionsMenu();
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            if (!isAdded()) {
                return;
            }

            if (!mUserLearnedDrawer) {
                mUserLearnedDrawer = true;
                SharedPreferences sp = PreferenceManager
                    .getDefaultSharedPreferences(getActivity());
                sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
            }

            getActivity().supportInvalidateOptionsMenu();
        }
    };

    if (!mUserLearnedDrawer && !mFromSavedInstanceState)
        mDrawerLayout.openDrawer(mFragmentContainerView);

    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mDrawerToggle.syncState();
        }
    });

    mDrawerLayout.setDrawerListener(mDrawerToggle);

}

【讨论】:

    【解决方案2】:
       protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    
    
    
        mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
        mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
    }
    

    【讨论】:

    • 你可以删除这个并编辑你的问题吗(如果你觉得这仍然需要,尽管我相信问题出在我在回答中所说的 NavigationDrawerFragment 中)?您应该会在问题下方看到一个编辑链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    相关资源
    最近更新 更多