是否可以隐藏工具栏并在滑动到特定页面时禁用滚动?

时间:2016-03-03 09:08:10

标签: java android android-viewpager toolbar

我希望能够在滑动时隐藏工具栏到特定选项卡,然后将其锁定。扩展它然后锁定也适用于我,虽然我更喜欢第一个。

我尝试过像下面的代码那样的东西,但它会产生一些快速的行为,因为页面最初是滚动屏幕的。一旦我将滚动标志设置为0,整个页面就会快速恢复,然后锁定屏幕并展开工具栏,这是有道理的,因为滚动标志设置为零,页面根本无法滚动屏幕所以它只是重新开始。

我倾向于的页面是一个聊天页面,为了在底部有一个静态文本输入栏,我真的需要禁用该页面的滚动,同时使其他页面成为可能。

你们能想出一些方法来实现这个目标吗?

的活动:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_group);
    appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // add all the needed fragments for the tabs inside a Vector
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    viewPager.setAdapter(pagerAdapter);
    viewPager.setOffscreenPageLimit(4);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

    viewPager.clearOnPageChangeListeners();
    viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListenerGroups(tabLayout, this, fab, appBarLayout));

    viewPager.setCurrentItem(CURRENT_TAB);
}

public void disableToolbarScrolling()
{
    logger.d("disabling scrolling toolbar");
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(0);  // clear all scroll flags
    toolbar.setLayoutParams(params);
}

public void enableToolbarScrolling()
{
    logger.d("enabling scrolling toolbar");
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);  // clear all scroll flags
    toolbar.setLayoutParams(params);
}

然后使用PageChangeListener处理事件:

public TabLayoutOnPageChangeListenerGroups(TabLayout tabLayout, Activity activity, FloatingActionsMenu fab, AppBarLayout appBarLayout)
{
    ...
    this.appBarLayout = appBarLayout;
    ...
}

private void enableScrolling()
{
    ((GroupActivity) mActivity).enableToolbarScrolling();
    toolbarState = toolbarState_enabled;
}

private void disableScrolling()
{
    ((GroupActivity) mActivity).disableToolbarScrolling();
    toolbarState = toolbarState_disabled;
}

@Override
public void onPageSelected(int position)
{
    if(position == 0)
    {
        logger.d("pos 0");
        disableScrolling();
        appBarLayout.setExpanded(false);
    }
    else
    {
        logger.d("pos != 0");
        enableScrolling();
    }
}

编辑1:

我尝试将工具栏可见性设置为GONE或INVISIBLE。但它们只会使工具栏变白,在屏幕顶部显示一个白色条。仍然允许滚动行为。

2 个答案:

答案 0 :(得分:0)

将此行添加到onCreate中的代码中 setSupportActionBar(toolbar);然后添加 toolbar.setVisibility(View.GONE);

答案 1 :(得分:0)

要隐藏工具栏,您可以尝试:

getSupportActionBar().hide();