我的应用使用旧式选项菜单。目前我们的目标是API 9.在Galaxy S4上,我注意到以下行为:
此时,点击选项菜单中的任何元素(包括“更多”)选项似乎都没有效果。 然而系统实际上是缓存这些水龙头。如果用户点击菜单五次(没有可见效果),则点击后退按钮隐藏菜单,然后点击菜单按钮再次显示菜单,所有缓存的点击立即进行。每次用户点击该菜单项时,都会调用onOptionsMenuItemSelected()一次。
这只发生在S4(可能还有其他三星设备)上。值得注意的是,我没有看到使用Galaxy Nexus运行股票4.2.2的这种行为。
这是三星Android自定义的错误,还是我在我的应用中更有可能做错了什么?股票Android代码更宽容?
答案 0 :(得分:3)
下面的自定义菜单代码,并使用运行软糖豆4.2.1的galaxy S3进行测试,并且工作正常,
不幸的是我没有S4,但你也可以检查一下这是没有更多的按钮:
public class CustomMenu extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public boolean onCreateOptionsMenu(android.view.Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.cool_menu, menu);
getLayoutInflater().setFactory(new Factory() {
public View onCreateView(String name, Context context,
AttributeSet attrs) {
if (name.equalsIgnoreCase(
"com.android.internal.view.menu.IconMenuItemView")) {
try {
LayoutInflater li = LayoutInflater.from(context);
final View view = li.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
// set the background drawable if you want that
//or keep it default -- either an image, border
//gradient, drawable, etc.
view.setBackgroundResource(R.drawable.myimage);
((TextView) view).setTextSize(20);
// set the text color
Typeface face = Typeface.createFromAsset(
getAssets(),"OldeEnglish.ttf");
((TextView) view).setTypeface(face);
((TextView) view).setTextColor(Color.RED);
}
});
return view;
} catch (InflateException e) {
//Handle any inflation exception here
} catch (ClassNotFoundException e) {
//Handle any ClassNotFoundException here
}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.AboutUs:
Intent i = new Intent("com.test.demo.ABOUT");
startActivity(i);
break;
case R.id.preferences:
Intent p = new Intent("com.test.demo.PREFS");
startActivity(p);
break;
case R.id.exit:
finish();
break;
}
return false;
}
}
不要忘记在res文件夹中创建名为menu的文件夹,并在菜单文件夹中为您的菜单创建一个XML(例如cool_menu.xml),如下所示:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="about"android:id="@+id/AboutUs" />
<item android:title="Prefs" android:id="@+id/preferences" />
<item android:title="Exit" android:id="@+id/exit" />
</menu>
希望这会有所帮助。