使用 AppCompat v22 时缺少 ActionBarDrawerToggle 图标
ActionBarDrawerToggle icon missing when using AppCompat v22
我正在使用 Appcompat v22 为 AutoCompleteTextView 使用有色样式。
但是,一旦我将 build.gradle 更改为:
compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:cardview-v7:21.0.2'
compile 'com.android.support:recyclerview-v7:21.0.2'
对此:
compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:gridlayout-v7:22.0.0'
compile 'com.android.support:cardview-v7:22.0.0'
ActionBarDrawerToggle 图标(汉堡图标)丢失。 (但是,如果我从左边滑动,抽屉就会显露出来)
在 onCreate() 内部:
mDrawerLayout = (BBDrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
toolbar.setTitle(mTitle);
invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
trackEvent(TrackingAware.MENU_SHOWN, null);
toolbar.setTitle(mDrawerTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
也调用了 syncState()
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
if (mDrawerToggle != null) {
mDrawerToggle.syncState();
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (mDrawerToggle != null) {
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
如果我将 appcompat 版本降级回 21.0.3,一切都会开始工作。
相关部分在代码的最后一行,我在我的Activity.onCreate(..)
方法中有它们:
_drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 0, 0);
drawerLayout.setDrawerListener(_drawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
我记得该行也有记录,但在 appcompat v21 中它们被忽略了(或者至少默认值不同..)
对于那些遇到与 Dapp 相同问题(切换显示后退箭头而不是汉堡包图标)的人,这很可能是因为您在 Activity 中缺少 drawerToggle.syncState()
。
更具体地说,您必须像这样重写 onPostCreate() 方法:
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
这不是唯一需要覆盖的方法。有关详细信息,请参阅 jpardogo 的 this post。
还请务必在您的操作栏上使用正确的主题...如果您的操作栏是深色的,则默认图标可能是黑色的,除非您这样做:
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
它咬了我,但只在 Android 4.x 设备上(5.x+ 奇怪地工作得很好)
我正在使用 Appcompat v22 为 AutoCompleteTextView 使用有色样式。 但是,一旦我将 build.gradle 更改为:
compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:cardview-v7:21.0.2'
compile 'com.android.support:recyclerview-v7:21.0.2'
对此:
compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:gridlayout-v7:22.0.0'
compile 'com.android.support:cardview-v7:22.0.0'
ActionBarDrawerToggle 图标(汉堡图标)丢失。 (但是,如果我从左边滑动,抽屉就会显露出来)
在 onCreate() 内部:
mDrawerLayout = (BBDrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
toolbar.setTitle(mTitle);
invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
trackEvent(TrackingAware.MENU_SHOWN, null);
toolbar.setTitle(mDrawerTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
也调用了 syncState()
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
if (mDrawerToggle != null) {
mDrawerToggle.syncState();
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (mDrawerToggle != null) {
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
如果我将 appcompat 版本降级回 21.0.3,一切都会开始工作。
相关部分在代码的最后一行,我在我的Activity.onCreate(..)
方法中有它们:
_drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 0, 0);
drawerLayout.setDrawerListener(_drawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
我记得该行也有记录,但在 appcompat v21 中它们被忽略了(或者至少默认值不同..)
对于那些遇到与 Dapp 相同问题(切换显示后退箭头而不是汉堡包图标)的人,这很可能是因为您在 Activity 中缺少 drawerToggle.syncState()
。
更具体地说,您必须像这样重写 onPostCreate() 方法:
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
这不是唯一需要覆盖的方法。有关详细信息,请参阅 jpardogo 的 this post。
还请务必在您的操作栏上使用正确的主题...如果您的操作栏是深色的,则默认图标可能是黑色的,除非您这样做: "@style/ThemeOverlay.AppCompat.Dark.ActionBar"
它咬了我,但只在 Android 4.x 设备上(5.x+ 奇怪地工作得很好)