如何在android中的布局内创建自定义菜单?
Posted
技术标签:
【中文标题】如何在android中的布局内创建自定义菜单?【英文标题】:How to create customized menu inside a layout in android? 【发布时间】:2013-12-05 17:36:24 【问题描述】:我想创建一个自定义菜单,并将该菜单放在 RelativeLayout 中心的特定布局中,我尝试过这样但没有奏效:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Home" >
<LinearLayout
android:id="@+id/grid1"
android:layout_
android:layout_
android:background="@android:color/darker_gray"
android:layout_centerInParent="true"
android:orientation="vertical" >
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/Main"
android:title="@string/main"/>
<item android:id="@+id/Sub"
android:title="@string/sub"/>
</menu>
</LinearLayout>
</RelativeLayout>
在 Java 中:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
//RelativeLayout layout = (RelativeLayout) findViewById(R.layout.activity_home);
getMenuInflater().inflate(R.menu.home, menu);
return true;
P.s我也尝试将它放在一个单独的文件中,然后添加它,但这样做时它只显示在操作栏中。
【问题讨论】:
【参考方案1】:无法在布局中直接使用菜单。而是在 res/menu 文件夹中创建菜单布局。然后在任何按钮单击事件中使用 Pop up menu 侦听器对其进行充气。以下链接中有一个很好的示例。 您还可以使用 PopMenuWindow class 将自定义布局用作 popUpMenu。
http://www.javatpoint.com/android-popup-menu-example
【讨论】:
【参考方案2】:尝试以下步骤:
1) 在菜单文件夹(/res/menu/menu.xml)中创建menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_setting_menu"
android:title="@string/menu_setting"
app:showAsAction="collapseActionView"/>
<item
android:id="@+id/action_logout"
android:title="Logout"
app:showAsAction="collapseActionView"/>
</menu>
2) 在Activity类中创建函数showMenu(view)
private void showMenu(View view)
PopupMenu popupMenu = new PopupMenu(Activity.this, view);//View will be an anchor for PopupMenu
popupMenu.inflate(R.menu.menu);
Menu menu = popupMenu.getMenu();
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();
3) 设置 Anchor for menu ,你想在哪里显示 PopupMenu
LinearLayout layout = findViewById(R.id.grid1);//You can use other view as anchor
layout.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
showMenu(view);// call function to show PopupMenu
);
【讨论】:
【参考方案3】:将android:showAsAction="never"
放入菜单项以在菜单中显示项目。
喜欢
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/Main"
android:title="@string/main"
android:showAsAction="never"/>
<item android:id="@+id/Sub"
android:title="@string/sub"
android:showAsAction="never"/>
</menu>
将菜单布局放入菜单文件夹(res的子文件夹)
【讨论】:
执行此操作时,它显示在操作栏中而不是指定布局中以上是关于如何在android中的布局内创建自定义菜单?的主要内容,如果未能解决你的问题,请参考以下文章