先构建好xml布局文件 用于弹窗的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="5dp"
android:layout_marginTop="20dp"
android:background="@drawable/popmenu"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_popmenu_record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="10dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@mipmap/add" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:text="记一笔"
android:textColor="@color/fffwhite"
android:textSize="20sp" />
LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="0.7dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/fffwhite" />
<LinearLayout
android:id="@+id/ll_popmenu_book"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@mipmap/book" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:text="账本切换"
android:textColor="@color/fffwhite"
android:textSize="20sp" />
LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="0.7dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/fffwhite" />
<LinearLayout
android:id="@+id/ll_popmenu_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@mipmap/search" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:text="搜索账本"
android:textColor="@color/fffwhite"
android:textSize="20sp" />
LinearLayout>
LinearLayout>
新建TopPopWindow extends PopupWindow。
package views;
import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import com.chase.cn.money_of_my.R;
/**
* Created by Chase on 2017/2/23.
*/
public class TopPopWindow extends PopupWindow {
private View mView;
private LinearLayout ll_popmenu_record,ll_popmenu_book,ll_popmenu_search;
public TopPopWindow(Activity paramActivity, View.OnClickListener paramOnClickListener,
int paramInt1, int paramInt2){
mView = LayoutInflater.from(paramActivity).inflate(R.layout.popwindow_topright, null);
ll_popmenu_record = (LinearLayout) mView.findViewById(R.id.ll_popmenu_record);
ll_popmenu_book = (LinearLayout) mView.findViewById(R.id.ll_popmenu_book);
ll_popmenu_search = (LinearLayout) mView.findViewById(R.id.ll_popmenu_search);
if (paramOnClickListener != null){
//设置点击监听
ll_popmenu_record.setOnClickListener(paramOnClickListener);
ll_popmenu_book.setOnClickListener(paramOnClickListener);
ll_popmenu_search.setOnClickListener(paramOnClickListener);
setContentView(mView);
//设置宽度
setWidth(paramInt1);
//设置高度
setHeight(paramInt2);
//设置显示隐藏动画
setAnimationStyle(R.style.AnimTools);
//设置背景透明
setBackgroundDrawable(new ColorDrawable(0));
}
}
}
使用:在自己的MainActivity调用showTopRightPopMenu()。
/**
* 显示右上角popup菜单
*/
private void showTopRightPopMenu() {
/**
* 用屏幕宽高计算popwindow的宽高
*/
WindowManager wm = this.getWindowManager();
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
int popWidth = width / 2;
int popHeight = height / 3;
if (topPopWindow == null) {
//(activity,onclicklistener,width,height)
topPopWindow = new TopPopWindow(MainActivity.this, this, popWidth, popHeight);
//监听窗口的焦点事件,点击窗口外面则取消显示
topPopWindow.getContentView().setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
topPopWindow.dismiss();
}
}
});
//pop消失时 背景调至原来的亮度
topPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
backgroundAlpaha(MainActivity.this, 1.0f);
}
});
}
//设置默认获取焦点
topPopWindow.setFocusable(true);
//以某个控件的x和y的偏移量位置开始显示窗口
topPopWindow.showAsDropDown(bt_add, 0, 18);
backgroundAlpaha(MainActivity.this, 0.5f);
//如果窗口存在,则更新
topPopWindow.update();
}
/**
* 设置添加屏幕的背景透明度 1.popwindow弹窗用作背景变暗
**/
public void backgroundAlpaha(Activity context, float bgAlpha) {
WindowManager.LayoutParams lp = context.getWindow().getAttributes();
lp.alpha = bgAlpha;
context.getWindow()
.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
context.getWindow().setAttributes(lp);
}