如何为android 3.0及更高版本创建选项菜单,以及在更高版本的手机中不显示选项菜单图标

如何为android 3.0及更高版本创建选项菜单,以及在更高版本的手机中不显示选项菜单图标,android,Android,如何为Android 3.0及更高版本的手机创建optionmenu 我正在尝试在我的Android程序中创建选项菜单。我正在使用以下代码为选项菜单充气。选项菜单图标在更高版本的手机中不显示 public class MainScreenTab extends FragmentActivity implements ActionBar.TabListener { private ViewPager viewPager; private TabsPagerAdapter mAdapter; pr

如何为Android 3.0及更高版本的手机创建optionmenu


我正在尝试在我的Android程序中创建选项菜单。我正在使用以下代码为选项菜单充气。选项菜单图标在更高版本的手机中不显示

public class MainScreenTab extends FragmentActivity implements
ActionBar.TabListener {

private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;

private String[] tabs = { "Merchants", "Personal Payee" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen_tab_layout);

        //Initilization
        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        //Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
            .setTabListener(this));
        }

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });


    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu); //inflate our menu
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        // switch(item.getItemId()) {
        int id = item.getItemId();

        if (id == R.id.item_refresh) {
            Intent i = new Intent(MainScreenTab.this,ListMerchantType.class);
            startActivity(i);
            return true;
        }
        else if (id == R.id.item_save) {
            Intent i = new Intent(MainScreenTab.this,ListPayee.class);
            startActivity(i);
            return true;
        }

             return super.onOptionsItemSelected(item);
    }

}

菜单:
通常是屏幕上显示的命令或设施列表。它是用户的通用用户界面。如果您想提供熟悉且一致的用户体验,您应该在活动中使用菜单。它是从android 3.0(Api级别11)开始的。因此,设计和用户体验我对设备到设备的更改取决于菜单API

android中主要有菜单。这些是选项菜单、上下文菜单、弹出菜单

Options menu:
选项菜单是活动的菜单项集合。您找到对应用程序影响很大的图标的位置。这些菜单项包括搜索、设置、撰写电子邮件

如果您正在为Android 2.3及更低版本开发选项菜单,用户可以通过按下菜单按钮来显示选项菜单。在3.0及更高版本上,选项菜单项作为操作栏项的组合。从Android 3.0开始,菜单按钮就不推荐使用(有些设备没有),因此您应该使用操作栏来提供对操作和其他选项的访问

Creating Options Menu in android
“简单选项”菜单是您应该包含与活动相关的选项和其他操作的地方。选项菜单中的项目取决于您使用的版本。 如果低于3.0,则按下菜单按钮时出现。如果更高,将显示在屏幕顶部。表示将包括在操作栏屏幕中

您可以从Activity子类或Fragment子类中为options菜单声明项。如果您同时声明了活动中的两个项目,则会依次出现。您还可以在每个需要移动的位置对android:orderInCategory属性中的菜单项重新排序

要首先在“活动”中指定菜单项,需要重写一个方法。该方法是onCreateOptions菜单()。这种方法提供了自己的onCreateOptionsMenu()回调

Example:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   MenuInflater inflater = getMenuInflater();
   inflater.inflate(R.menu.game_menu, menu);
   return true;
}
我们可以使用add()和findItem()在菜单项api中执行添加和检索选项。 处理OnCreateOptions菜单()中的单击事件: 如果要在菜单项上提供单击事件,系统将调用OnOptions ItemSelected。在该方法中,您可以通过使用item.getItemId()来标识选择的项目。它返回菜单项的唯一ID(由菜单资源中的android:ID属性定义,或为add()方法指定一个整数)。如果你认为它是匹配的,你可以执行你的行动,无论你想要什么

例如:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   // Handle item selection
   switch (item.getItemId()) {
       case R.id.new_game:
           newGame();
           return true;
       case R.id.help:
           showHelp();
           return true;
       default:
           return super.onOptionsItemSelected(item);
   }
}
成功处理将返回true的菜单项时。如果不处理该项,则应调用OnOptions ItemSelected()的超类实现。 在运行时更改菜单项: 调用显示简单OnCreateOptions菜单()的OnCreateOptions菜单()时。您不能在运行时更改项目。如果要在运行时更改项目,则需要调用onPrepareOptionsMenu()方法。此方法按菜单对象当前存在的状态传递给您,以便您可以对其进行修改,例如添加、删除或禁用项

示例项目:

打开eclipse并创建一个名为OptionsMenu的项目名称。 在资源文件夹中打开菜单文件夹。在main.xml文件中添加所需的项目数。您可以在下面获得main.xml文件

Main.xml

<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/item1" android:title="Tutorial 1"></item>
   <item android:id="@+id/item2" android:title="Tutorial 2"></item>
   <item android:id="@+id/item3" android:title="Tutorial 3"></item>
   <item android:id="@+id/item4" android:title="Tutorial 4"></item>
   <item android:id="@+id/item5" android:title="Tutorial 5"></item>
</menu>

完成后,运行项目,即可获得以下输出。通过这种方式,我们可以在android中执行选项菜单。

您只需使用此
反射
方法强制在
操作栏中显示图标

  public static void forceOverFlowIconInActionBar(Activity mActivity)
{

    try
    {
        ViewConfiguration config = ViewConfiguration.get(mActivity);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null)
        {
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config, false);
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

试试这个<代码>导入java.lang.reflect.Field
并且在您的
onCreateOptions菜单()
方法上只需添加:

if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
     try {
          Field field = menu.getClass().getDeclaredField("mOptionalIconsVisible");
          field.setAccessible(true);
          field.setBoolean(menu, true);
     } catch (Exception ignored) {
          ignored.printStackTrace();
     }
}

别忘了将它添加到您的xml菜单中,android:icon=“@drawable/blah_blah”。希望能有帮助。如果有帮助,请不要忘记投票。

您在查看方面面临的问题是什么?选项菜单图标在更高版本的手机中不显示。将为您提供您需要添加到您的
OnCreate
方法中的答案。如果您觉得它符合您的目的,请将其作为
答案接受。
  public static void forceOverFlowIconInActionBar(Activity mActivity)
{

    try
    {
        ViewConfiguration config = ViewConfiguration.get(mActivity);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null)
        {
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config, false);
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
     try {
          Field field = menu.getClass().getDeclaredField("mOptionalIconsVisible");
          field.setAccessible(true);
          field.setBoolean(menu, true);
     } catch (Exception ignored) {
          ignored.printStackTrace();
     }
}