Android模拟器右上角隐藏菜单的三点不显示解决办法
在需要显示菜单的Activity类中,添加一个下面的方法,并在创建Android菜单时调用
private void getOverflowMenu(){
ViewConfiguration config=ViewConfiguration.get(this);
Field menuKeyField;
try {
menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField!=null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
效果如图:
菜单的两种生成方式
1.在布局文件中生成:在res文件夹下找到menu文件夹,在这个文件夹中建立一个后缀为xml的文件,先添加菜单组group,再添加item
效果图
xml文件layout视图
xml文件源码
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group android:id="@+id/group1">
<item android:id="@+id/item1"
android:title="菜单项1"></item>
<item android:id="@+id/item2"
android:title="菜单项2"></item>
<item android:id="@+id/item3"
android:title="菜单项3"></item>
<item android:id="@+id/item4"
android:title="菜单项4"></item>
</group>
</menu>
2.在java代码中动态生成,以PopMenu菜单为例
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
menu.add(0,0x101,1,"新建1").setIntent(new Intent());//组id,itemid,0x101十六进制的257
menu.add(0,0x101,2,"编辑1");
menu.add(0,0x101,3,"保存1");
return true;
}
实现菜单的点击与长按效果
点击弹出PopMenu菜单
长按弹出PopMenu菜单
点击右上角,显示菜单项
另附源码:
import java.lang.reflect.Field;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView tv,textView,textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.tv);
textView=(TextView) findViewById(R.id.textView);
textView1=(TextView)findViewById(R.id.textView1);
textView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
PopupMenu pm= new PopupMenu(MainActivity.this, textView1);//不能低于api-11版本
pm.getMenuInflater().inflate(R.menu.popmenu, pm.getMenu());
pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem arg0) {
String message="";
switch (arg0.getItemId()) {
case R.id.item1:
message="菜单项1";
break;
case R.id.item2:
message="菜单项2";
break;
case R.id.item3:
message="菜单项3";
break;
case R.id.item4:
message="菜单项4";
break;
default:
message="没有菜单项被选中";
break;
}
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
return false;
}
});
pm.show();
}
});
//注册组件
registerForContextMenu(tv);
registerForContextMenu(textView);
getOverflowMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
menu.add(0,0x101,1,"新建1").setIntent(new Intent());//组id,itemid,0x101十六进制的257
menu.add(0,0x101,2,"编辑1");
menu.add(0,0x101,3,"保存1");
return true;
}
private void getOverflowMenu(){
ViewConfiguration config=ViewConfiguration.get(this);
Field menuKeyField;
try {
menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField!=null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//上下文菜单,两种生成方式(写在xml中,在java代码中动态生成),长按触发
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
if (v.getId()==R.id.tv) {
getMenuInflater().inflate(R.menu.main, menu);
}else {
getMenuInflater().inflate(R.menu.menu1, menu);
}
}
//选项菜单:右上角隐藏的菜单
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "当前菜单的id:"
+item.getItemId()+",当前标题:"
+item.getTitle()+",组:"
+item.getGroupId(), Toast.LENGTH_LONG).show();
/*switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(MainActivity.this, "新建菜单被选中", Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(MainActivity.this, "编辑菜单被选中", Toast.LENGTH_SHORT).show();
break;
case R.id.item3:
Toast.makeText(MainActivity.this, "删除菜单被选中", Toast.LENGTH_SHORT).show();
break;
case R.id.itemM1:
Toast.makeText(MainActivity.this, "模板1被选中", Toast.LENGTH_SHORT).show();
break;
case R.id.itemM2:
Toast.makeText(MainActivity.this, "模板2被选中", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(MainActivity.this, "default菜单没有被选中", Toast.LENGTH_SHORT).show();
break;
}*/
return super.onOptionsItemSelected(item);
}
}