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:
image 2:
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!
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.