简体   繁体   中英

Action Bar Sherlock old menu on overflowed items

I'm developing a android app with Action Bar Sherlock library, it runs normal on my device with api 17, "image 1", but on api 8 I'm getting the old menu style on itens out of action bar, "image 2", as follow my menu code:

Menu XML file:

<item
    android:id="@+id/menu_main_filter"
    android:alphabeticShortcut="@string/action_filter_shortcurt"
    android:icon="@drawable/ic_action_filter"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/action_filter"/>
<item
    android:id="@+id/menu_main_share"
    android:alphabeticShortcut="@string/action_share_shortcurt"
    android:icon="@drawable/ic_action_share"
    android:orderInCategory="101"
    android:showAsAction="ifRoom"
    android:title="@string/action_share"/>
<item
    android:id="@+id/menu_main_about"
    android:alphabeticShortcut="@string/action_about_shortcurt"
    android:icon="@drawable/ic_action_about"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/action_about"/>

<group
    android:id="@+id/menu_main_group_display_settings"
    android:checkableBehavior="single"
    android:orderInCategory="1000" >
    <item
        android:id="@+id/menu_main_use_indian_numbers"
        android:alphabeticShortcut="@string/action_use_indian_numbers_shortcurt"
        android:icon="@drawable/ic_action_indian"
        android:orderInCategory="10001"
        android:showAsAction="ifRoom"
        android:title="@string/action_use_indian_numbers"
        android:titleCondensed="@string/action_use_indian_numbers_condensed"/>
    <item
        android:id="@+id/menu_main_use_arabic_numbers"
        android:alphabeticShortcut="@string/action_use_arabic_numbers_shortcurt"
        android:icon="@drawable/ic_action_arabic"
        android:orderInCategory="10002"
        android:showAsAction="ifRoom"
        android:title="@string/action_use_arabic_numbers"
        android:titleCondensed="@string/action_use_arabic_numbers_condensed"/>
</group>

Activity java code:

public class MainActivity extends AbstractNombrojActivity {

private ListView listView;
private ListMainAdapter<Nombro> listMainAdapter;

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

    listView = (ListView) findViewById(R.id.main_listview);
    listMainAdapter = new ListMainAdapter<Nombro>(getApplicationContext());
    listView.setAdapter(listMainAdapter);
    listView.setEmptyView(findViewById(R.id.main_listview_emptyview));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.main, menu);
    NombrojPreferences preferences = new NombrojPreferences(getApplicationContext());
    for (int c = 0; c < menu.size(); c++) {
        MenuItem menuItem = menu.getItem(c);
        if (menuItem.getItemId() == R.id.menu_main_use_indian_numbers && preferences.getNumberAlgarism() == NumbersAlgarism.Indian)
            menuItem.setChecked(true);
        if (menuItem.getItemId() == R.id.menu_main_use_arabic_numbers && preferences.getNumberAlgarism() == NumbersAlgarism.Arabic)
            menuItem.setChecked(true);
    }
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_main_use_indian_numbers:
        new NombrojPreferences(getApplicationContext()).setNumberAlgarism(NumbersAlgarism.Indian);
        invalidate();
        return true;
    case R.id.menu_main_use_arabic_numbers:
        new NombrojPreferences(getApplicationContext()).setNumberAlgarism(NumbersAlgarism.Arabic);
        invalidate();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

// custom
private void invalidate() {
    supportInvalidateOptionsMenu();
    listMainAdapter.notifyDataSetChanged();
}

My Aplication Theme:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

On values:

<style name="AppBaseTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar"></style>
<style name="AppTheme" parent="AppBaseTheme"></style>

On values-v11:

<style name="AppBaseTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar"></style>

And values-v14:

<style name="AppBaseTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar"></style>

What can causing this wrong behavior?


image 1:

api 17上的菜单

image 2:

api上的meni

Thanks a lot!

This is the standard implementation of the ActionBar for backwards compatibility since in api 8 the devices had a menu button and that was the standard. It helps keep platforms in standards (whether that is to be the old standard).

After a long search really it seems have no solution, because Android support Library and Action Bar Sherlock Library will use the old menu on old devices like the J.Romero said. So I did it, I create a fork from ActionBarSherlock and I'm using a customized version basead on ActionBarSherlock version 4.1.0 and using the theme "@style/Theme.Sherlock.[ANY].ForceOverflow", in my case "@style/Theme.Sherlock.Light.DarkActionBar.ForceOverflow". So it's all, works perfectly.

Detail, I not recommend use my version because it have no support and any bug solved or new feature of ActionBarSherlock version 4.2.0 or later will not show there!

here my fork

and bellow the new screenshots after solution :D

Api 8:

旧设备

Api 17:

新装置

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM