我刚刚修改了我们的代码以使用v7-appcompat库中提供的新SupportActionBar,但是当在Jellybean手机上运行代码时(可能是Honeycomb和Ice Cream Sandwich存在同样的问题),主页按钮不会似乎被激活了。
调用getSupportActionBar()。setHomeButtonEnabled(true);似乎并不像它说的那样,但适用于姜饼手机。
如果我用getActionBar()替换它.setHomeButtonEnabled(true)它确实有效。
我用于v11 +的主题如下:
<style name="MyTheme" parent="@style/Theme.AppCompat">
<item name="android:windowActionBar">true</item>
<item name="android:windowNoTitle">false</item>
<item name="android:listViewStyle">@style/MyListView</item>
<item name="android:actionBarStyle">@style/MyActionBarStyle</item>
<item name="android:windowSoftInputMode">stateAlwaysHidden</item>
<item name="android:buttonStyle">@style/MyButton</item>
<item name="android:radioButtonStyle">@style/MyRadioButtonStyle</item>
<item name="android:windowContentOverlay">@drawable/ab_solid_dove_grey</item>
<item name="android:windowTitleSize">@dimen/action_bar_height</item>
<item name="android:selectableItemBackground">@drawable/sel_standard_item</item>
<item name="android:windowBackground">@drawable/default_bg</item>
<item name="android:actionMenuTextAppearance">@style/MyActionBarText</item>
<item name="android:actionMenuTextColor">@color/gallery</item>
<item name="android:tabWidgetStyle">@style/MyTabWidget</item>
</style>
并定义了操作栏样式v11 +:
<style name="MyActionBarStyle" parent="android:style/Widget.Holo.ActionBar">
<item name="android:displayOptions">useLogo|showHome|showCustom</item>
<item name="displayOptions">useLogo|showHome|showCustom</item>
<item name="android:actionBarSize">@dimen/action_bar_height</item>
<item name="android:icon">@drawable/ic_launcher</item>
<item name="android:background">@android:color/transparent</item> <!-- Remove blue line from bottom of action bar -->
</style>
任何人都知道为什么在支持操作栏的Android版本上没有启用主页按钮。
===更新=== 我刚刚查看了appcompat库的源代码,我注意到ActionBarImplBase中的以下内容对我来说是错误的:
setHomeButtonEnabled(abp.enableHomeButtonByDefault() || homeAsUp);
这意味着只有在Android版本低于ICS或我启用了向上指示符时才会启用主页按钮? - 我不想要。
答案 0 :(得分:14)
你是否尝试过使用这三种方法(也尝试交换getSupportActionbar()
)?
getActionBar().setDisplayShowHomeEnabled(true);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
您是否尝试过手动处理按钮?
@Override
public boolean onOptionsItemSelected(int featureId, MenuItem item) {
int itemId = item.getItemId();
if(itemId == android.R.id.home){
// Do stuff
}
return true;
}
答案 1 :(得分:11)
这个对我有用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your_activity);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// ... other stuff
}
@Override
public boolean onSupportNavigateUp(){
finish();
// or call onBackPressed()
return true;
}
当您使用onSupportNavigateUp()
中的后退按钮时,会调用方法SupportActionBar
。
答案 2 :(得分:1)
尝试使用Sherlock库为Android设备,例如Gingerbread cos android操作栏仅支持3.0以上,因此sherlock锁定库为您提供向后兼容性。
http://actionbarsherlock.com/ ---在这里下载库。
然后在代码中添加此行。
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setIcon(android.R.color.transparent);
actionBar.setDisplayUseLogoEnabled(false);
这可以帮助您在操作栏中添加返回主页键。如果您不希望它显示,它也会使您的图标不可见。 但是,如果您希望在所有活动中显示您的应用图标,只需在下面注明这一行
actionBar.setIcon(android.R.color.transparent);
答案 3 :(得分:1)
现在请试试这个。因为我能够解决我自己的问题,虽然这是在Sherlock上。从你上面的风格我可以看到你对你的主题做了一些自定义。在我的情况下,我对我的Sherlock主题进行了一些自定义,这就是我在android 4.0及以上主题上失败的问题。所以我简单地添加了一段代码,告诉android在android 4.0及更高版本上运行时使用默认的Sherlock主题。所以我想这对你有用。你告诉android在你不适合的android版本上使用v7-appcompat库的默认主题。
代码如下:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
this.setTheme(R.style.Theme_Sherlock);
} else {
this.setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);
}
在您的情况下,将主题编辑为v7-appcompat库。
如果适合您,请标记为答案。我相信有可能从您正在使用它的地方的代码中自定义主题。
答案 4 :(得分:0)
通过为活动扩展ActionBarActivity类并将活动主题设置为Theme.AppCompat或类似主题,您可以在API级别7或更高级别上运行时为活动添加ActionBar。