使用支持操作栏启用

Bar*_*ine 8 android android-appcompat android-actionbar

我刚刚修改了我们的代码以使用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>
Run Code Online (Sandbox Code Playgroud)

并定义了动作栏样式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>
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么在正确支持操作栏的Android版本上没有启用主页按钮.

=== UPDATE ===我刚刚查看了appcompat库的源代码,我注意到ActionBarImplBase中的以下内容对我来说是错误的:

 setHomeButtonEnabled(abp.enableHomeButtonByDefault() || homeAsUp);
Run Code Online (Sandbox Code Playgroud)

这意味着只有在Android版本低于ICS或者我启用了向上指示器时才会启用主页按钮? - 我不想要的.

Kc *_*son 14

您是否尝试过使用这三种方法(也尝试交换getSupportActionbar())?

 getActionBar().setDisplayShowHomeEnabled(true);
 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true); 
Run Code Online (Sandbox Code Playgroud)

您是否尝试过手动处理按钮?

@Override
public boolean onOptionsItemSelected(int featureId, MenuItem item) {
     int itemId = item.getItemId();
     if(itemId == android.R.id.home){
         // Do stuff
     }
     return true;
}
Run Code Online (Sandbox Code Playgroud)

  • Home as upEnabled 工作 - 尽管它看起来有点奇怪,因为我正在使用徽标并且我不想显示 up-indicator。其他两个似乎根本不起作用。正如我的问题中所述,将它与 getActionBar() 一起使用确实有效,但 getSupportActionBar 应该阻止我需要根据 Android 版本进行分支 (2认同)

Jas*_*ulo 13

这个对我有用:

@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;
}
Run Code Online (Sandbox Code Playgroud)

onSupportNavigateUp()使用后退按钮时调用该方法SupportActionBar.