0

プロジェクトに SherlockActionBar を追加し、いくつかのメニュー項目を追加したところ、エミュレーター (4.0.3) では正常に動作しましたが、私の電話 (Galaxy S3) では動作しませんでした。表示されないだけです。

マニフェストで 9 の最小 SDK バージョンで 15 をターゲットにしています。

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="15" />
<application
    android:icon="@drawable/dimmiicon"
    android:label="@string/app_name"
    android:theme="@style/Theme.Sherlock.Light.DarkActionBar" >

コードはかなり単純ですが、おそらく何かが欠けています。関連ビット...

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.MenuItem;


public class Launcher extends SherlockFragmentActivity  implements  OnUserAuthenticatedListener, OnDialogChatterListener, OnAnimationCompleteListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_launcher);

    final ActionBar ab = getSupportActionBar();
    ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    ab.setCustomView(R.layout.title_bar);

    ab.setStackedBackgroundDrawable(getResources().getDrawable(R.drawable.titlebarbackground));
    TextView txt = (TextView) findViewById(R.id.myTitle1);  
    Typeface font = Typeface.createFromAsset(getAssets(), "caviar_dreams_bold.ttf");
    txt.setTypeface(font);
    TextView txt2 = (TextView) findViewById(R.id.myTitle2);  
    Typeface font2 = Typeface.createFromAsset(getAssets(), "caviardreams.ttf");
    txt2.setTypeface(font2); 
}  
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.commonmenus, menu);
    return true;
}



@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:

        return false;
    case R.id.search_for_product:
        performProductReview(findViewById(android.R.id.content));
        return true;
    case R.id.search_for_business:
        performCompanyReview(findViewById(android.R.id.content));
        return true;
    case R.id.search_for_service:
        performServiceReview(findViewById(android.R.id.content));
        return true;
    case R.id.search_for_person:
        performPersonReview(findViewById(android.R.id.content));
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

そして commonmenus.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/menu_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/menu_settings"/>
<item android:id="@+id/search_for_product" android:showAsAction="never" android:orderInCategory="10" android:title="@string/menu_search_for_product"></item>
<item android:id="@+id/search_for_business" android:showAsAction="never" android:orderInCategory="11" android:title="@string/menu_search_for_business"></item>
<item android:id="@+id/search_for_service" android:showAsAction="never" android:orderInCategory="12" android:title="@string/menu_review_service"></item>
<item android:id="@+id/search_for_person" android:showAsAction="never" android:orderInCategory="14" android:title="@string/menu_review_person"></item>
<item android:id="@+id/view_my_reviews" android:showAsAction="never" android:orderInCategory="15" android:title="@string/menu_view_my_reviews"></item>

</menu>

私はシャーロックアクションバーを使用して、いくつかのカスタムフォントを使用してタイトルをカスタマイズしています。これはエミュレーターと電話で動作していますが、メニューはエミュレーターにのみ表示されます。カスタムフォントコードをコメントアウトして試してみましたが、違いはありませんでした。

念のために言っておきますが、3 つのメニュー ドットは表示されません。

手がかりを探して数時間を費やした後、私は途方に暮れています。任意の洞察をいただければ幸いです。

4

1 に答える 1

1

Android Honeycomb+ を搭載したデバイスでActionBarSherlockは、ストックActionBar機能を使用して動作します。つまり、非常に特定のシナリオでのみレガシー メニュー ボタンを配置する公式の ActionBar が残ります。こちらを参照してください: http://android-developers.blogspot.co. il/2012/01/say-goodbye-to-menu-button.html

[レガシー アプリのアクション オーバーフロー ボタン] の下:

アプリが専用のメニュー ボタンのないデバイスで実行される場合、システムは、マニフェスト要素でサポートすることを宣言した API レベルに基づいて、アクション オーバーフローをナビゲーション バーに追加するかどうかを決定します。ロジックは次のように要約されます。

minSdkVersion または targetSdkVersion を 11 以上に設定すると、システムは従来のオーバーフロー ボタンを追加しません。

それ以外の場合、システムは Android 3.0 以降で実行されているときに従来のオーバーフロー ボタンを追加します。

唯一の例外は、minSdkVersion を 10 以下に設定し、targetSdkVersion を 11、12、または 13 に設定し、ActionBar を使用しない場合、Android 4.0 またはより高い。

于 2012-12-24T21:59:25.713 に答える