Android 单击按钮上的菜单

Android 单击按钮上的菜单,android,android-menu,Android,Android Menu,我为我的活动创建了一个菜单,其中包含3项 showAsAction="never" 所以在工具栏的右角我有菜单按钮,当我点击它时,菜单出现在屏幕的右角 但如果我按下智能手机上的菜单按钮,相同的菜单会出现在左下角 如何始终打开顶部菜单 它取决于android版本,因此对于always top,您必须创建自己的自定义拨号 private void showStatusPopup(最终活动上下文,p点) { LayoutInflater LayoutInflater=(LayoutInflater

我为我的活动创建了一个菜单,其中包含3项

 showAsAction="never"
所以在工具栏的右角我有菜单按钮,当我点击它时,菜单出现在屏幕的右角

但如果我按下智能手机上的菜单按钮,相同的菜单会出现在左下角

如何始终打开顶部菜单

它取决于android版本,因此对于always top,您必须创建自己的自定义拨号

private void showStatusPopup(最终活动上下文,p点)
{
LayoutInflater LayoutInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
视图布局=布局更平坦。充气(R.layout.custom弹出,空);
ListView l=(ListView)layout.findViewById(R.id.list);
字符串s[]=null;
final UserBean user=Utill.getUserPreference(mContext);
if(user.isUserLogin()){
s=LoginNuOptions;
} 
否则{
s=未知选项;
}
ArrayAdapter ArrayAdapter=新的ArrayAdapter(mContext,R.layout.simpletextview,R.id.tvName,s);
l、 设置适配器(阵列适配器);
//创建弹出窗口
最终PopupWindow changeStatusPopUp=新PopupWindow(上下文);
changeStatusPopUp.setContentView(布局);
changeStatusPopUp.setWidth(330);
//changeStatusPopUp.setWidth(LinearLayout.LayoutParams.WRAP_内容);
changeStatusPopUp.setHeight(LinearLayout.LayoutParams.WRAP_内容);
changeStatusPopUp.setFocusable(真);
//一些偏移使弹出窗口向左对齐一点,向下对齐一点,
//相对于按钮的位置。
int OFFSET_X=视图宽度-290;
int OFFSET_Y=0;
//清除默认的半透明背景
changeStatusPopUp.setBackgroundDrawable(新的BitmapDrawable());
//在指定位置显示弹出窗口+偏移量。
changeStatusPopUp.showAtLocation(布局、重力、无重力、p.x+偏移、p.y+偏移);
l、 setOnItemClickListener(新的AdapterView.OnItemClickListener()
{
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3{
changeStatusPopUp.disclose();
}
}
});
}

考虑是否值得违反用户期望-如果他们有一个硬件菜单按钮,它将在所有具有菜单的应用程序中从底部打开菜单,而不仅仅是在您的应用程序中。我可以用什么方式创建自定义拨号?
 private void showStatusPopup(final Activity context, Point p) 
{
LayoutInflater layoutInflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = layoutInflater.inflate(R.layout.custom_pop_up, null);
ListView l = (ListView) layout.findViewById(R.id.list);
String s[] = null;

final UserBean user = Utill.getUserPreferance(mContext);
if (user.isUserLogin()) {
    s = loginMenuOptions;
} 
else {
    s = unknownUserOptions;
}


ArrayAdapter arrayAdapter = new ArrayAdapter<String>(mContext, R.layout.simpletextview, R.id.tvName, s);
l.setAdapter(arrayAdapter);
// Creating the PopupWindow
final PopupWindow changeStatusPopUp = new PopupWindow(context);
changeStatusPopUp.setContentView(layout);
changeStatusPopUp.setWidth(330);
//changeStatusPopUp.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
changeStatusPopUp.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
changeStatusPopUp.setFocusable(true);

// Some offset to align the popup a bit to the left, and a bit down,
// relative to button's position.
int OFFSET_X = VIEW_POART_WIDTH - 290;
int OFFSET_Y = 0;

// Clear the default translucent background
changeStatusPopUp.setBackgroundDrawable(new BitmapDrawable());

// Displaying the popup at the specified location, + offsets.
changeStatusPopUp.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y);
l.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) { 
            changeStatusPopUp.dismiss();
        }
    }
});
}