0

我正在使用 appcompat-v7 库来反向移植 Lollipop 工具栏。它看起来是正确的,但是当我单击汉堡包图标时它没有动画(它仍然是一个汉堡包图标)。奇怪的是,如果我打开抽屉并旋转设备,汉堡图标会变成一个箭头,就像它应该在旋转之前一样。如果我旋转回纵向,它会保持一个箭头。这是我的代码:

import android.support.v7.app.ActionBarDrawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base_navigation);

    mDrawerLayout = ButterKnife.findById(this, R.id.drawer_layout);
    mContentFrameLayout = ButterKnife.findById(this, R.id.content);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open_menu, R.string.close_menu);
    mDrawerLayout.setDrawerListener(this);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return mDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}

还有我的主题:

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light" />

</resources>
4

1 回答 1

0

问题在于这一行:mDrawerLayout.setDrawerListener(this);

DrawerListener一个方法叫做onDrawerSlide(). 那是动画被触发的地方,它由ActionBarDrawerToggle对象处理。用这个换掉那一行:

mDrawerLayout.setDrawerListener(mDrawerToggle);

如果您需要监听抽屉上的事件,您可以在ActionBarDrawerToggle对象上覆盖它们:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open_menu, R.string.close_menu) {
    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
        getSupportActionBar().setTitle(R.string.app_name);
    }

    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);
        getSupportActionBar().setTitle(getTitle());
    }
};

请务必致电super实施。

于 2014-10-23T16:18:53.633 回答