点击布局内菜单按钮会弹出菜单
就成跟其他菜单差不多,首先是在主界面建一个按钮,然后写出菜单布局,最后在主页面写出逻辑,按钮我们写一个点击事件,等会在主界面在这个点击事件里面写菜单
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="点击弹出菜单"android:onClick="typeSizeClick"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
然后写一个菜单的布局文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/s"android:title="S"android:orderInCategory="1"></item><itemandroid:id="@+id/m"android:title="M"android:orderInCategory="2"></item><itemandroid:id="@+id/l"android:title="L"android:orderInCategory="3"></item>
</menu>
首先在按钮的点击事件里写出菜单,如果菜单里面的按钮也想有点击事件的话,需要我们先写一个弹出式菜单的点击事件然后把主页面继承PopupMenu.OnMenuItemClickListener接口,然后重写抽象方法,在抽象方法里面写菜单里面按钮的点击逻辑
package com.example.popupmenu;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = findViewById(R.id.button);}public void typeSizeClick(View view){PopupMenu popupMenu = new PopupMenu(this,view);//创建弹出式菜单popupMenu.inflate(R.menu.menu_main);//将自制的弹出布局绑定菜单popupMenu.setOnMenuItemClickListener(this);//弹出式菜单的单击事件popupMenu.show();//显示菜单}@Overridepublic boolean onMenuItemClick(MenuItem menuItem) {switch (menuItem.getItemId()){case R.id.s:Toast.makeText(this,"你选择了S号",Toast.LENGTH_SHORT).show();break;case R.id.m:Toast.makeText(this,"你选择了M号",Toast.LENGTH_SHORT).show();break;case R.id.l:Toast.makeText(this,"你选择了L号",Toast.LENGTH_SHORT).show();break;}return false;}
}
点击之后