我按照android官方文档的指示,在我的应用程序中实现了一个导航抽屉。
一切正常,但由于我的一些片段正在使用选项卡,因此我希望在展开抽屉时同时“滚动”tabviews
。就像这里所示:
来自我的
actionBarToggle
的onDrawerSlide()方法正合适,因为它传递了抽屉展开的百分比。
我在actionBarToggle
的onDrawerOpened()
和onDrawerClosed()
方法中更改了操作栏的导航模式,一切正常。但我想要某种动画效果,因为当前看起来很生硬。
[抽屉打开 - puff选项卡消失puff; 抽屉关闭- puff选项卡再次出现puff]
以下为我的当前代码:
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle =
new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer,
R.string.navigation, R.string.closed) {
public void onDrawerClosed(View view) {
supportInvalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
setTitle(getString(R.string.navigation));
setIcon(R.drawable.abc_ic_search_api_holo_light);
supportInvalidateOptionsMenu();
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
// TODO animation
super.onDrawerSlide(drawerView, slideOffset);
}
};
我希望能够获取tabhost/view或其他类似的内容,并根据slideOffset
设置其高度。
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
TabView tabView = actionBar.getTabView(); // how do I get the view where the tabs are shown?
ViewGroup.LayoutParams tabViewLayoutParams = tabView.getLayoutParams();
ViewGroup.LayoutParams tabViewNewLayoutParams = new ViewGroup.LayoutParams(a.width, (int)((1 - slideOffset) * normalTabHeight))
drawer.setLayoutParams(tabViewNewLayoutParams );
super.onDrawerSlide(drawerView, slideOffset);
}
我该如何获取tabs所在的view?
我正在使用适用于API 7+的support库和SupportActionBar。actionbar中包含了名为"tabhost"的组件,我该如何获取这个"tabview/host"并在运行时以编程方式更改其高度?
((ViewGroup)getWindow().findViewById(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ? android.support.v7.appcompat.R.id.action_bar_container : Resources.getSystem().getIdentifier("action_bar_container", "id", "android"))).getChildAt(2);
请注意,如果容器包含在顶部操作栏中,则此代码将返回null。 - corsair992