【问题标题】:Move action bar along with Navigation Drawer与导航抽屉一起移动操作栏
【发布时间】:2016-11-30 11:15:55
【问题描述】:

我已经按照 google guildlines 实现了导航栏,但我想将操作栏与抽屉一起移动。我什至提到了How to slide the ActionBar along with the NavigationDrawer,但无法实现。

我想在不使用第三方库的情况下实现以下目标:

抽屉活动:

public  abstract class BarcodeBaseActivity extends ActionBarActivity {

 @Override
    protected void onCreate(Bundle savedInstanceState) {

 setSupportActionBar(toolbar);
//        setTypface();

        mTitle = getTitle();
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
//        drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

        mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open,
                R.string.navigation_drawer_close) {
            public void onDrawerClosed(View view) {
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                supportInvalidateOptionsMenu();
                history.setSelected(false);
                help.setSelected(false);
                unipoints.setSelected(false);
                promotions.setSelected(false);
                notifications.setSelected(false);
                info.setSelected(false);
                contact.setSelected(false);
                signout.setSelected(false);
                drawerOpened = false;
            }

            public void onDrawerOpened(View drawerView) {
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                supportInvalidateOptionsMenu();
                getSupportActionBar().setTitle(mTitle);
                history.setSelected(true);
                help.setSelected(true);
                unipoints.setSelected(true);
                promotions.setSelected(true);
                notifications.setSelected(true);
                info.setSelected(true);
                contact.setSelected(true);
                signout.setSelected(true);
                drawerOpened = true;
            }

            public void onDrawerSlide(View drawerView, float slideOffset) {
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                supportInvalidateOptionsMenu();
            }
        };
        drawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerToggle.setDrawerIndicatorEnabled(false);
        mDrawerToggle.setHomeAsUpIndicator(R.drawable.burger);
        ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                float slideOffset = (Float) valueAnimator.getAnimatedValue();
                mDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);
            }
        });
        anim.setInterpolator(new DecelerateInterpolator());

// You can change this duration to more closely match that of the default animation.
        anim.setDuration(500);
        anim.start();
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                drawerLayout.openDrawer(Gravity.LEFT);
            }
        });

        drawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerToggle.syncState();
//        drawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));

        drawerList = (ListView) findViewById(R.id.drawer_list);
        View list_header = getLayoutInflater().inflate(R.layout.drawerlist_header, null);
  drawerItems = getDrawerItems(pos);
        drawerList.setAdapter(new DrawerListAdapter(this, getLayoutInflater(), drawerItems));
        drawerList.setOnItemClickListener(new DrawerItemClickListener());


        if (drawerOpened) {
            history.setSelected(false);
            help.setSelected(false);
            unipoints.setSelected(false);
            promotions.setSelected(false);
            notifications.setSelected(false);
            info.setSelected(false);
            contact.setSelected(false);
            signout.setSelected(false);
        } else {
            history.setSelected(true);
            help.setSelected(true);
            unipoints.setSelected(true);
            promotions.setSelected(true);
            notifications.setSelected(true);
            info.setSelected(true);
            contact.setSelected(true);
            signout.setSelected(true);
        }

        setTitle(mTitle);
    }

  @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getSupportActionBar().setTitle(mTitle);
    }


 private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d(BarcodeBaseActivity.class.getSimpleName(), "Drawer item clicked at position " + position);

            /*for (DrawerItem drawerItem : drawerItems) {
                drawerItem.setSelected(false);
            }

            DrawerItem drawerItem = drawerItems.get(position - 1);
            drawerItem.setSelected(true);

            HeaderViewListAdapter headerViewListAdapter = (HeaderViewListAdapter) drawerList.getAdapter();
            DrawerListAdapter drawerListAdapter = (DrawerListAdapter) headerViewListAdapter.getWrappedAdapter();
            drawerListAdapter.notifyDataSetChanged();
*/
            selectItem(position);
            for (DrawerItem drawerItem : drawerItems) {
                drawerItem.setSelected(false);
            }
            if (position > 0) {
                DrawerItem drawerItem = drawerItems.get(position - 1);
                drawerItem.setSelected(true);

            }
            updateDrawer();
            SharedPreferences.Editor sharedPreferences = getSharedPreferences(AppConstants.PREFERENCE_SHARED_PREF_NAME, Context.MODE_PRIVATE).edit();
            sharedPreferences.putInt(AppConstants.PREFERENCE_LAST_DRAWERITEM_CLICKED, position - 1);
            sharedPreferences.commit();
        }
    }

请帮我一些sn-p。

【问题讨论】:

  • 我不认为必须这样做。你想在 Android 上实现 IOS 应用程序是什么?
  • @YuriiTsap 但也有很多 Android 应用程序实现了与 ios 应用程序相同的功能。所以这意味着它也可以在android中实现
  • 是的,可能是,但是为什么你需要IOS设计。我们有自己的——材料。至于 fum - 你可以尝试实现这一点 - 但对于现实世界的应用程序 - 不是最好的方法。您可以使用窗口管理器标志尝试很多技巧,也可以看看这个答案stackoverflow.com/a/23954699/3874721
  • @YuriiTsap :我知道这不符合 Android 行会,但我的 ui 是这样的,我必须实现相同的目标。否则我也很乐意使用默认的。另外,我也实现了上面的答案,但它不像我想要的那样工作
  • 问题是你没有一个简单直接的解决方案。其他一切都将只是一个黑客。正如我所说,您需要使用窗口管理器。也许你应该考虑隐藏实际的状态栏并建立自己的,然后你可以重叠它。

标签: android drawerlayout navigation-drawer android-actionbaractivity


【解决方案1】:

【讨论】:

  • SlidingPaneLayout 不移动操作栏。我想将操作栏与抽屉一起移动
  • 可以使用toolbar代替默认的action bar,需要在slidingPaneLayout的第二个布局中添加toolbar。
  • 我不明白。第二种布局是什么?
  • SlidingPaneLayout 有 2 个子布局,第一个为左侧布局,第二个为右侧布局。默认情况下,显示右侧布局,当滑动面板布局打开时,左侧出来,右侧推到更右侧。您需要将工具栏添加到正确的布局中。
  • 我正在尝试使用滑动窗格来实现,但我想它不会给我想要的。
【解决方案2】:

将此添加到您的 Drawer Callbacks

@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
    View container = findViewById(R.id.container);
    container.setTranslationX(slideOffset * drawerView.getWidth() * -1);
}

【讨论】:

  • 这个容器是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多