一、特点
1、可以在任意位置出现(对话框基本上只会在中间出现)
2、在弹窗中间可以附加多种操作(对话框通常指针对于一种操作的不同选择)
3、弹窗不会展现在界面中,只有进行某种操作后,才会出现,而出现的弹窗必然是与操作相关的一些后续操作或选项(弹窗是一个在你需要的时候,给你更多选择;在你不需要的时候,不会干扰你的视线)
二、PopupWindow的位置
以某一控件为参照物,设置相对位置
三、PopupWindow使用步骤
1、创建PopupWindow对象实例
2、设置背景、注册时间监听器和添加动画
3、展示PopupWindow
showPopupWindow.java
//设置showPopupWindow
private void showPopupWindow(View view) {
//把整个布局变成一个View,准备弹窗所需要的视图对象
View v= LayoutInflater.from(this).inflate(R.layout.popup_layout,null);//没有父容器,传null
//1、创建PopupWindow对象实例
//参数1:用在弹窗中的View
//参数2、3:弹窗的宽、高
//参数4(focusable):能否获取焦点
final PopupWindow window=new PopupWindow(v,420,100,true);
//2、设置背景、注册时间监听器和添加动画
//设置背景
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//设为背景为透明色
//设置能响应外部的点击事件
window.setOutsideTouchable(true);
//设置弹窗能响应点击事件
window.setTouchable(true);
//设置动画效果
//①创建动画资源 ②创建一个style应用动画资源 ③对当前弹窗的动画风格设置为第二步的资源索引
window.setAnimationStyle(R.style.translate_anim);
//3、展示PopupWindow
//参数1(anchor):锚,显示在某个按钮的下面
//参数2、3:相对于锚在x、y方向上的偏移量
window.showAsDropDown(view,-500,0);
//为弹窗中的文本设置点击事件
v.findViewById(R.id.choose).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"您点击了选择",Toast.LENGTH_SHORT).show();
window.dismiss();//点击了弹窗中的文本后,弹窗消失
}
});
v.findViewById(R.id.choose_all).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"您点击了全选",Toast.LENGTH_SHORT).show();
window.dismiss();
}
});
v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"您点击了复制",Toast.LENGTH_SHORT).show();
window.dismiss();
}
});
}
styles.xml
<!-- ②创建一个style应用动画资源 -->
<style name="translate_anim">
<item name="android:windowEnterAnimation">@anim/translate</item>
</style>
popup_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00ffff"
android:padding="2dp">
<TextView
android:id="@+id/choose"
android:layout_width="45dp"
android:layout_height="30dp"
android:text="选择"
android:textColor="#ffffff"
android:gravity="center"
android:background="#000000"/>
<TextView
android:id="@+id/choose_all"
android:layout_width="45dp"
android:layout_height="30dp"
android:text="全选"
android:textColor="#ffffff"
android:gravity="center"
android:background="#000000"/>
<TextView
android:id="@+id/copy"
android:layout_width="45dp"
android:layout_height="30dp"
android:text="复制"
android:textColor="#ffffff"
android:gravity="center"
android:background="#000000"/>
</LinearLayout>
在myClick()方法中加入以下代码
case R.id.popup_btn:
showPopupWindow(view);
break;