【问题标题】:Is it possible to hide the Toolbar and disable the scroll when swiping to specific page?滑动到特定页面时是否可以隐藏工具栏并禁用滚动?
【发布时间】:2016-03-03 18:13:14
【问题描述】:

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

我尝试过像下面的代码那样做一些事情,但它会引起一些活泼的行为,因为页面最初是在屏幕上滚动的。一旦我将滚动标志设置为 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。但它们只会使工具栏变白,在屏幕顶部显示一个白色条。仍然允许滚动行为。

【问题讨论】:

  • 你试过了吗。 toolbar.setVisibility(View.INVISIBLE);
  • @KhizarHayat 嗯,我试试看
  • @KhizarHayat 不,它只是使工具栏不可见,同时仍然允许滚动。基本上在屏幕顶部给我一个白条。
  • 没有得到你的 quistian .. 你想只在工具栏可见时才允许滑动?
  • @saleed,我有一页我想禁用工具栏滚动行为。该页面是一个聊天页面,底部有一个文本输入。启用工具栏滚动后,当用户滚动聊天列表时,文本输入栏会上下滚动。我希望文本输入固定在底部,同时允许工具栏在其他页面上滚动。

标签: java android android-viewpager toolbar


【解决方案1】:

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

【讨论】:

  • 用 supportAction 试试吧
  • aah 抱歉,我的代码中已经包含了。我发布的代码并不是我所拥有的一切,我尝试制作一个最小的工作示例。
【解决方案2】:

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

getSupportActionBar().hide();

【讨论】:

  • 嗯嗯,去试试看。
  • 隐藏它仍然允许页面在屏幕上和屏幕外滚动。
猜你喜欢
  • 1970-01-01
  • 2015-02-17
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多