0

Action Bar Sherlock ライブラリを使用して Android アプリを開発しています。API 17 の「画像 1」を使用してデバイスで正常に動作しますが、API 8 では、アクション バーから itens の古いメニュー スタイルを取得しています「画像 2」 "、私のメニューコードに従ってください:

メニュー XML ファイル:

<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>

アクティビティ Java コード:

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();
}

私のアプリケーションのテーマ:

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

値について:

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

値-v11:

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

そしてvalues-v14:

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

この間違った動作の原因は何ですか?


画像 1:

API 17 のメニュー

画像 2:

API 8 のメニ

どうもありがとう!

4

2 に答える 2

0

J.Romeroが言ったように、AndroidサポートライブラリとアクションバーSherlockライブラリは古いデバイスで古いメニューを使用するため、長い検索の後、実際には解決策がないようです. ActionBarSherlockからフォークを作成し、ActionBarSherlockバージョン4.1.0に基づいてカスタマイズされたバージョンのベース広告を使用し、テーマ「@style/Theme.Sherlock.[ANY].ForceOverflow」を使用しています。私の場合は「@スタイル/Theme.Sherlock.Light.DarkActionBar.ForceOverflow". それで、それはすべて、完全に機能します。

詳細については、サポートがなく、バグが解決されていないか、バージョン4.2.0以降のActionBarSherlockの新機能が表示されないため、私のバージョンを使用することはお勧めしません!

ここに私のフォーク

解決後の新しいスクリーンショットを以下に示します:D

API 8:

古いデバイス

API 17:

新しいデバイス

于 2013-08-18T08:30:45.933 に答える
0

API 8 ではデバイスにメニュー ボタンがあり、それが標準であったため、これは後方互換性のための ActionBar の標準実装です。プラットフォームを標準に保つのに役立ちます (それが古い標準であるかどうかにかかわらず)。

于 2013-08-15T16:54:05.710 に答える