22

在使用 android-support-v4.jar 库的项目中,我无法在 ICS 的片段中显示选项菜单。我正在 Galaxy Nexus 手机上进行测试。

我们没有使用操作栏,需要应用程序兼容 2.2+。我们在 ICS 的活动中看不到任何选项菜单(FragmentActivity 不支持 onCreateOptionsMenu)

我可以让菜单在以前版本的 Android 中工作 - 我拥有所有正确的框架来启用选项菜单(如下所示),但 ICS 中没有显示任何内容。单步执行代码时不会调用 onCreateOptionsMenu。任何人都可以建议修复吗?

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

public class SuperFragment extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.display_options_actions, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case R.id.menu_sign_in:
                break;
            case R.id.menu_sign_out:
                break;
        }
        return true;
    }
    // ...
}

清单文件中的目标操作系统版本:

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="14"/>
4

3 回答 3

32

android:targetSdkVersion="14"从清单中删除会再次启用选项菜单按钮。

这是因为我@android:style/Theme.Black.NoTitleBar在清单中指定了一个主题 - android:targetSdkVersion 为 14,选项菜单被插入到操作栏菜单中,而不是底部按钮栏中的选项菜单按钮屏幕和主题正在删除活动标题和操作栏。

可以删除操作栏,但我不确定这是否能解决问题,因为我还没有让它工作,以便它在 2.2-4 版本之间兼容。

于 2011-12-02T09:55:09.327 回答
11

只需将 android:targetSdkVersion 从“14”更改为“10”(小于 11),即可解决此问题。

<uses-sdk android:minSdkVersion="3" 
      android:targetSdkVersion="10" />
于 2012-06-21T10:04:51.307 回答
2

根据 Android CDD,不显示选项菜单的新行为的截止值是 targetSdkVersion > 10。您的选择是在 targetSdkVersion <= 10 的旧模式下运行您的应用程序,或者使您的应用程序适应新指南(例如添加应用程序中的菜单按钮或使用操作栏)。请注意,您不必增加目标构建版本(eclipse 中的项目属性)来增加 targetSdkVersion。

于 2012-01-12T18:19:07.070 回答