一、效果图
二、代码
1、菜单布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:background="#393a3f"
android:drawableStart="@drawable/album"
android:drawablePadding="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="发起群聊"
android:textColor="#ffffff"
android:textSize="18sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:background="#393a3f"
android:drawableStart="@drawable/album"
android:drawablePadding="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="发起群聊"
android:textColor="#ffffff"
android:textSize="18sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:background="#393a3f"
android:drawableStart="@drawable/album"
android:drawablePadding="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="发起群聊"
android:textColor="#ffffff"
android:textSize="18sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:background="#393a3f"
android:drawableStart="@drawable/album"
android:drawablePadding="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="发起群聊"
android:textColor="#ffffff"
android:textSize="18sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:background="#393a3f"
android:drawableStart="@drawable/album"
android:drawablePadding="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:text="发起群聊"
android:textColor="#ffffff"
android:textSize="18sp"/>
</LinearLayout>
2、主布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--顶部标题栏-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
android:background="#303030"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="10dp"
android:text="微信"
android:textSize="25sp"
android:textColor="#ffffff"/>
<TextView
android:id="@+id/tv_plus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="15dp"
android:gravity="end"
android:text="+"
android:textSize="40sp"
android:textColor="#ffffff"/>
</LinearLayout>
</LinearLayout>
3、逻辑代码
package com.example.administrator.app_book_test;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ActionBar actionBar;
private TextView tv_plus;
PopupWindow popupWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//隐藏系统标题栏
actionBar = getSupportActionBar();
hideActionBar();//调用隐藏ActionBar的方法
tv_plus = findViewById(R.id.tv_plus);//初始化视图
tv_plus.setOnClickListener(this);//点击事件
}
//隐藏ActionBar的方法
private void hideActionBar() {
actionBar.hide();
}
//点击事件汇总
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.tv_plus:
//点击事件
showPopupWindow();
break;
case R.id.btn1:
Toast.makeText(this, "按钮1被单击了", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
break;
}
}
//显示popupWindow
private void showPopupWindow(){
//获取自定义菜单的布局文件
final View popupWindow_view = getLayoutInflater().inflate(R.layout.wechat_menu_layout,null,false);
//创建popupWindow,设置宽度和高度
popupWindow = new PopupWindow(popupWindow_view,ActionBar.LayoutParams.WRAP_CONTENT,ActionBar.LayoutParams.WRAP_CONTENT,true);
//内部控件的点击事件
Button btn1 = popupWindow_view.findViewById(R.id.btn1);
btn1.setOnClickListener(this);
//设置菜单的显示位置
popupWindow.showAsDropDown(tv_plus,0,0);
//兼容5.0点击其他位置隐藏popupWindow
popupWindow_view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//必须写 v.performClick();解决与单击事件的冲突
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
//如果菜单不为空,且菜单正在显示
if(popupWindow!=null&&popupWindow.isShowing()){
popupWindow.dismiss();//隐藏菜单
popupWindow = null;//初始化菜单
}
break;
case MotionEvent.ACTION_UP:
view.performClick();
break;
default:
break;
}
return false;
}
});
}
}