手机上缺少Sherlock ActionBar下拉菜单,可在模拟器上运行

时间:2012-12-24 20:00:24

标签: android android-emulator actionbarsherlock

我将SherlockActionBar添加到我的项目中,添加了一些菜单项,它在模拟器(4.0.3)中工作正常,但它在我的手机上无效(Galaxy S3);它只是没有出现。

我的目标是在我的清单中以最低sdk版本9定位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>

我正在使用sherlock操作栏使用一些自定义字体自定义标题,并且正在模拟器和手机上工作,但菜单只显示在模拟器上。我确实尝试使用自定义字体代码注释掉它没有任何区别。

我很清楚:3个菜单点甚至都没有显示出来。

在花了几个小时搜索并寻找线索后,我感到很茫然。任何见解都将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于使用Android Honeycomb + ActionBarSherlock的设备,我们会使用库存ActionBar功能,这意味着您只需要使用官方ActionBar,它只会将遗留菜单按钮放在非常特定的场景中,看这里: http://android-developers.blogspot.co.il/2012/01/say-goodbye-to-menu-button.html

在&#34;旧版应用的行动溢出按钮&#34;:

  

如果您的应用在没有专用菜单按钮的设备上运行,则   system决定是否将操作溢出添加到导航   bar,根据您声明支持的API级别   清单元素。逻辑归结为:

     

如果将minSdkVersion或targetSdkVersion设置为11或更高,   系统不会添加传统溢出按钮。

     

否则,系统将在运行时添加旧版溢出按钮   在Android 3.0或更高版本上。

     

唯一的例外是,如果将minSdkVersion设置为10或更低,   将targetSdkVersion设置为11,12或13,并且不使用ActionBar,   系统将在运行您的应用程序时添加旧版溢出按钮   在Android 4.0或更高版本的手机上。