我目前正在努力使用Owner.Name
动画制作奇怪的东西; 汉堡包图标是滞后的,如果我没有让Handler延迟DrawerLayout
交易动画,那么它经常会从汉堡包切换到没有动画的箭头。
所以我最终放了一个处理程序,等到汉堡包图标执行动画,但我们感觉很自然,我们需要等到抽屉接近切换片段。我确定有更好的方法来解决这个问题......
以下是我目前的工作方式:
fragment
在private void selectProfilFragment() {
final BackHandledFragment fragment;
// TODO test this again
Bundle bundle = new Bundle();
bundle.putString(FragmentUserProfile.USER_FIRST_NAME, user.getFirstname());
bundle.putString(FragmentUserProfile.USER_LAST_NAME, user.getLastname());
bundle.putString(FragmentUserProfile.USER_PICTURE, user.getProfilepic());
bundle.putString(FragmentUserProfile.USER_EMAIL, user.getEmail());
bundle.putBoolean(FragmentUserProfile.USER_SECURITY, user.getParameters().getSecuritymodule().equals("YES"));
fragment = new FragmentUserProfile();
fragment.setArguments(bundle);
mDrawerLayout.closeDrawer(mDrawerLinear);
new Handler().postDelayed(new Runnable() {
public void run() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.pull_in_right, R.anim.push_out_left, R.anim.pull_in_left, R.anim.push_out_right);
ft.replace(R.id.content_frame, fragment)
.addToBackStack(fragment.getTagText())
.commitAllowingStateLoss();
}
}, 300);
}
结束和开放片段交易动画之间,它仍然存在故障。
以下是我如何实现抽屉:
DrawerLayout
答案 0 :(得分:2)
你是怎么做到的。在包含活动的片段设置您的抽屉。
public void setupDrawer(){
NavigationFragment drawerFragment = (NavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mActionbarToggle = drawerFragment.setUp(R.id.navigation_drawer, mDrawerLayout, mToolbar);
}
现在在NavigationDrawerFragment中定义 setUp 方法
public ActionBarDrawerToggle setUp(int navigation_drawer, DrawerLayout drawerLayout, Toolbar mToolbar) {
mFragmentContainerView = getActivity().findViewById(navigation_drawer);
this.mDrawerLayout = drawerLayout;
//mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (!isAdded()) {
return;
}
getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!isAdded()) {
return;
}
getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity) mContext).onBackPress();
}
});
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});
mDrawerLayout.setDrawerListener(mDrawerToggle);
return mDrawerToggle;
}
那就是它,你的抽屉是完全设置的。
答案 1 :(得分:2)
虽然我想引起你的注意,但我不确定是什么导致了这种行为。
ActionBarDrawerToggle
课程,但最好不要使用android.support.v7.app.ActionBarDrawerToggle
而不是android.support.v4.app.ActionBarDrawerToggle
,因为它已被弃用。addDrawerListener()
代替setDrawerListener()
,因为它已被弃用。true
以在转换期间旋转小节。
e.x.在 styles.xml 中,如here所述。在onDrawerClosed
和onDrawerOpened
致电syncState()。也可以在ActionBarDrawerToggle
上调用此方法。 Check this
希望这会对你有所帮助。