如何为更高版本的手机中没有显示的Android 3.0及更高版本和选项菜单图标创建optionmenu

时间:2014-07-09 04:53:27

标签: android

如何为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);
    }

}

3 个答案:

答案 0 :(得分:0)

您只需使用此Reflection方法强制ActionBar

中的图标
  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();
    }
}

答案 1 :(得分:0)

试试这个。 span在您的import java.lang.reflect.Field;方法上,只需添加:

即可
onCreateOptionsMenu()

并且不要忘记将其添加到您的xml菜单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(); } } 。希望能帮助到你。如果它有用,请不要忘记向上投票。

答案 2 :(得分:-2)

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

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

Options menu:

“选项”菜单是活动的菜单项集合。您找到对应用程序非常有影响的图标的位置。这些菜单项是搜索,设置,撰写电子邮件。

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

Creating Options Menu in android

简单选项菜单是您应该包含与活动相关的选项和其他操作的地方。选项菜单中的项目取决于您使用的版本。 如果按下菜单按钮时低于3.0。如果它更高,则会出现在屏幕顶部。包含操作栏屏幕的方法。

您可以从Activity子类或Fragment子类声明选项菜单的项目。如果您同时声明活动中的两个项目,则会出现一个跟随另一个项目。您还可以在每个需要移动的android:orderInCategory属性中重新排序菜单项。

要首先在活动中指定菜单项,您需要覆盖一个方法。该方法是onCreateOptionsMenu()。这个mehtod片段提供了自己的onCreateOptionsMenu()回调。

Example:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   MenuInflater inflater = getMenuInflater();
   inflater.inflate(R.menu.game_menu, menu);
   return true;
}

我们可以使用add()和findItem()在菜单项api中执行添加和检索选项。 处理onCreateOptionsMenu()中的单击事件: 如果要在菜单项上提供单击事件,系统将调用onOptionsItemSelected。在该方法中,您可以使用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的菜单项。如果没有处理那个你应该调用onOptionsItemSelected()的超类实现的项。 在运行时更改菜单项: 当你调用onCreateOptionsMenu()时,它显示简单的onCreateOptionsMenu()。您无法在运行时更改项目。如果要更改运行时中的项,则需要调用onPrepareOptionsMenu()方法。此方法会传递Menu对象,因为它当前存在,因此您可以对其进行修改,例如添加,删除或禁用项目。

示例项目:

打开你的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>

这里我使用了@ string / menu_settings,因此你可以在strings.xml文件中添加该项。

的strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

   <string name="app_name">OptionsMenu</string>
   <string name="hello_world">Hello world!</string>
   <string name="menu_settings">Settings</string>

</resources>

完成后,打开您的主要活动。在那里编写onCreateOptionsMenu方法,用于将菜单项添加到活动中。完成后,如果要提供单击事件,请编写onOptionsItemSelected。您可以在下面获得完整的代码。

MainActivity

package com.tutorialindustry.optionsmenu;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.main, menu);
       return true;
   }
    public boolean onOptionsItemSelected(MenuItem item) {
       switch (item.getItemId()) {
       case R.id.item1:
         Toast.makeText(this, "Tutorial 1 Selected", Toast.LENGTH_SHORT).show();
         return true;
       case R.id.item2:
         Toast.makeText(this, "Tutorial 2 Selected", Toast.LENGTH_SHORT).show();
         return true;
       case R.id.item3:
         Toast.makeText(this, "Tutorial 3 Selected", Toast.LENGTH_SHORT).show();
         return true;           
       case R.id.item4:
         Toast.makeText(this, "Tutorial 4 Selected", Toast.LENGTH_SHORT).show();
         return true;
       case R.id.item5:
         Toast.makeText(this, "Tutorial 5 Selected", Toast.LENGTH_SHORT).show();
         return true;          
       default:
         return super.onOptionsItemSelected(item);
       }
   }
}

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