如何在android布局中创建自定义菜单?

mf98qq94  于 2022-12-31  发布在  Android
关注(0)|答案(3)|浏览(189)

我想创建一个自定义菜单,并将该菜单放在 RelativeLayout 中心的特定布局中,我尝试这样做,但没有成功:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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_width="750dp"
        android:layout_height="400dp"
        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我也试着把它放在一个单独的文件中,然后添加它,但当这样做时,它只显示在操作栏中。

mklgxw1f

mklgxw1f1#

不可能直接在布局中使用菜单。请在res/menu文件夹中创建菜单布局。然后在任何按钮单击事件中使用弹出菜单侦听器来扩展它。下面的链接中有一个很好的示例。您还可以使用PopMenuWindow****class将自定义布局用作popUpMenu。
http://www.javatpoint.com/android-popup-menu-example

f5emj3cl

f5emj3cl2#

尝试以下步骤:
1)在菜单文件夹(/res/menu/menu.xml)中创建菜单. 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)在活动类中创建函数showMenu(视图)

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)设置菜单的定位点,您要在此处显示弹出菜单

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
        }
    });
lo8azlld

lo8azlld3#

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的子文件夹)

相关问题