如何为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);
}
}
答案 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中执行选项菜单。