使用支持操作栏启用

时间:2013-10-10 09:58:51

标签: android android-actionbar android-appcompat

我刚刚修改了我们的代码以使用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或我启用了向上指示符时才会启用主页按钮? - 我不想要。

5 个答案:

答案 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。