设置ActionBar后Android 2.x出错

时间:2014-03-07 12:05:28

标签: android android-actionbar backwards-compatibility

大家好我在MainActivity.java中设置此代码,在我的应用上添加一个分享按钮。我知道动作栏在之前的Android版本上运行不佳。其中一个拥有android 2.3的客户告诉我,当他点击手机菜单按钮时,应用程序崩溃并被迫关闭。 从版本3.0到上面的每件事都很顺利,你会看到分享按钮。我可以在此函数之前添加一些代码行来覆盖o如果android版本低于3.0,则阻止使用共享按钮操作吗?

这就是我在代码中的内容:

@Override

    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        MenuItem shareItem = (MenuItem) menu.findItem(R.id.action_share);
        ShareActionProvider mShare = (ShareActionProvider)shareItem.getActionProvider();

        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT, "Download here https://www.apps.com");

        mShare.setShareIntent(shareIntent);
        return true;
    }

我的menu.xml文件包含以下内容(显示图标,工作正常):

<item android:id="@+id/action_share" android:title="@string/menu_share"
      android:icon="@drawable/menu_share" android:showAsAction="ifRoom"
      android:actionProviderClass="android.widget.ShareActionProvider"></item>

1 个答案:

答案 0 :(得分:0)

Android 2.x中没有开箱即用的ActionBar。崩溃正在发生,因为MenuItem不理解API {14(Android 4.0冰淇淋三明治)中引入的getActionProvider()

您有两种选择:

  1. 使用v7 appcompat library以便在旧版Android中使用ActionBar;
  2. 或者,您可以实现旧的2.x菜单。
  3. 这是您可以做的,以避免2.x设备上的崩溃。通过检查设备是否运行Ice Cream Sandwich或更高版本来保护使用较新的API:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            MenuItem shareItem = (MenuItem) menu.findItem(R.id.action_share);
            ShareActionProvider mShare = (ShareActionProvider)shareItem.getActionProvider();
    
            Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, "Download here https://www.apps.com");
    
            mShare.setShareIntent(shareIntent);
        }
        return true;
    }