如何为android 3.0及更高版本创建选项菜单,以及在更高版本的手机中不显示选项菜单图标
如何为Android 3.0及更高版本的手机创建optionmenu如何为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程序中创建选项菜单。我正在使用以下代码为选项菜单充气。选项菜单图标在更高版本的手机中不显示
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();
}
}