使用兼容性库在ICS中未显示选项菜单

Mar*_*tyn 22 android android-optionsmenu android-4.0-ice-cream-sandwich android-support-library

我无法在使用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;
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="14"/>
Run Code Online (Sandbox Code Playgroud)

Mar*_*tyn 32

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

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

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

  • 关键不是TARGET 14,而是将其作为maxSDK包含在内.这样,ICS会尝试使旧菜单向前兼容,而不是期望ActionBar (4认同)
  • 实际上关键是目标小于11.我们今天发现了这一点.头痛!我们以为不使用ActionBar主题会启用兼容性菜单,显然不行! (4认同)

小智 11

只需将android:targetSdkVersion从"14"更改为"10"(少于11),这个问题就解决了.

<uses-sdk android:minSdkVersion="3" 
      android:targetSdkVersion="10" />
Run Code Online (Sandbox Code Playgroud)