【发布时间】: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