效果图
属性
-
popWindow.setFocusable(false);//底部导航消失
-
popWindow.showAsDropDown(v, 48, 0); //设置popupWindow显示的位置,参数依次是参照View,x轴的偏移量,y轴的偏移量
-
使用
//在自己想要点击的地方调用initPopWindow()方法,即可
public void btn(View view) {
initPopWindow(view);
}
import android.annotation.SuppressLint;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
- 方法
private PopupWindow popWindow;
@SuppressLint("WrongConstant")
private void initPopWindow(View v) {
View view = LayoutInflater.from(this).inflate(R.layout.item_popip, null, false);
TextView one = view.findViewById(R.id.tv_one_popu);
TextView two = view.findViewById(R.id.tv_two_popu);
if (null==popWindow){
//1.构造一个PopupWindow,参数依次是加载的View,宽高
//这种是自定义布局的宽
// popWindow = new PopupWindow(view,ViewGroup.LayoutParams.WRAP_CONTENT, true);
// ViewGroup.LayoutParams.WRAP_CONTENT,
//btn是点击的布局 id
//这种是显示 我点击的布局的宽
popWindow = new PopupWindow(view,
btn.getWidth(), ViewGroup.LayoutParams.WRAP_CONTENT, true);
popWindow.setFocusable(false);//底部导航消失
popWindow.setSoftInputMode(popWindow.INPUT_METHOD_NEEDED);
popWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
// popWindow.setAnimationStyle(R.anim.anim_pop); //设置加载动画
//这些为了点击非PopupWindow区域,PopupWindow会消失的,如果没有下面的
//代码的话,你会发现,当你把PopupWindow显示出来了,无论你按多少次后退键
//PopupWindow并不会关闭,而且退不出程序,加上下述代码可以解决这个问题
popWindow.setTouchable(true);
popWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
// 这里如果返回true的话,touch事件将被拦截
// 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
}
});
//点击外部消失
popWindow.setOutsideTouchable(true);//触摸其他地方消失
popWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {//消失后的处理
@Override
public void onDismiss() {
popWindow=null;
}
});
//要为popWindow设置一个背景才有效
popWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
//设置popupWindow显示的位置,参数依次是参照View,x轴的偏移量,y轴的偏移量
//popWindow.showAsDropDown(v, 48, 0);
PopupWindowCompat.showAsDropDown(popWindow, v, 0, 0, Gravity.START);
}
//设置popupWindow里的按钮的事件
one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplication(),"条件一",Toast.LENGTH_LONG).show();
if (null!=popWindow){
popWindow.dismiss();
popWindow=null;
}
}
});
two.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplication(),"条件二",Toast.LENGTH_LONG).show();
if (null!=popWindow){
popWindow.dismiss();
popWindow=null;
}
}
});
}
//退出时销毁
@Override
public void onDestroy() {
super.onDestroy();
if (null!=popWindow){
popWindow.dismiss();
popWindow=null;
}
}
- item_popip.xml
<?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:background="@color/white"
android:orientation="vertical">
<TextView
android:id="@+id/tv_one_popu"
android:padding="10dp"
android:layout_width="150dp"
android:gravity="center"
android:text="条件一"
android:textSize="15sp"
android:layout_height="wrap_content"
/>
<View
android:layout_width="150dp"
android:layout_height="1dp"
android:background="@color/sousuo"
/>
<TextView
android:id="@+id/tv_two_popu"
android:padding="10dp"
android:gravity="center"
android:textSize="15sp"
android:layout_width="150dp"
android:text="条件二"
android:layout_height="wrap_content"
/>
</LinearLayout>