【问题标题】:How to create customized menu inside a layout in android?如何在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_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我也尝试将它放在一个单独的文件中,然后添加它,但这样做时它只显示在操作栏中。

【问题讨论】:

    标签: android android-layout menu android-linearlayout android-relativelayout


    【解决方案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的子文件夹)

        【讨论】:

        • 执行此操作时,它显示在操作栏中而不是指定布局中
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多