PopupWindow(弹窗)
1.按钮绑定一个事件,这个实在点击事件里面的,而后面的方法为showPopupWindow()方法,此方法是由上面的showPopWindow();方法产生的,用来设置PopWindowprivate void showPopWindow(View view) {//实例化对象,这个id就是弹窗的页面的id,后面的参数问的是有没有父容器,由于没有,所以未null//这句代码的意义是,将R.layo
·

1.按钮绑定一个事件,这个实在点击事件里面的,而后面的方法为showPopupWindow()方法,此方法是由上面的
showPopWindow();方法产生的,用来设置PopWindow

private void showPopWindow(View view) {
//实例化对象,这个id就是弹窗的页面的id,后面的参数问的是有没有父容器,由于没有,所以未null
//这句代码的意义是,将R.layout.tanchuang,即弹窗看作一个view来显示,而这个方法即为LayoutInflater方法,from指从哪块空间或界面里面来做这件事,而我们这次是在本文里面,所以为this
inflate是找那个布局
View v=LayoutInflater.from(this).inflate(R.layout.tanchuang,null);
//第一个参数为弹窗转化成的view,第二个,第三个为弹窗的宽高,第四个参数为能否获取焦点
PopupWindow window=new PopupWindow(v,400,80,true);
//设置能相应外部的点击事件
window.setOutsideTouchable(true);
//设置弹窗能响应点击事件
window.setTouchable(true);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT))
//参数1(anchorma),就是这个PopWindow展示在哪个地方下面
window.showAsDropDown(view);
//下面的方法是点击弹窗后有显示,且弹窗点击后消失
//为弹窗中的文本添加点击事件,在布局中找那个空间,永远为findViewById()
//由于我们现在是在popupwindow这里运行,但是我们想要的控件却是在tanchuang里面,而因为
//我们设置popwindow时将tanchuang转化为view,所以我们要v即可
//View v=LayoutInflater.from(this).inflate(R.layout.tanchuang,null);
v.findViewById(R.id.xuanze).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(activity_dialogn.this, "你点击了选择", Toast.LENGTH_SHORT).show();
//点击后弹窗消失
window.dismiss();
}
});
v.findViewById(R.id.fuzhi).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(activity_dialogn.this, "你点击了复制", Toast.LENGTH_SHORT).show();
window.dismiss();
}
});
v.findViewById(R.id.quanxuan).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(activity_dialogn.this, "你点击了全选", Toast.LENGTH_SHORT).show();
window.dismiss();
}
});
}
//创建动画
MainActivity中要写的
//创建动画资源 创建一个style风格应用动画资源 对当前弹窗的动画风格设置为第二部的动画索引 window.setAnimationStyle(R.style.fengge);
新建一个src里的Android Resource Directory资源
在src文件的新建一个Android Resource Directory,在第二个框选anim创建一个动画资源
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
水平从什么地方开始(0表示现在的位置
android:fromXDelta="0"
水平到什么地方结束
android:toXDelta="0"
竖直从什么地方开始
android:fromYDelta="300"
竖直到什么地方结束
android:toYDelta="0"
持续时间(单位毫秒)
android:duration="2000"
/>
</set>
在theme中创建的风格
<style name="fengge">
<item name="android:windowEnterAnimation">@anim/translate</item>
</style>
MainActivity中的源码
package com.example.dialogn_test;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.PopupWindow;
import android.widget.Toast;
public class activity_dialogn extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popupwindow);
}
public void myClick(View view) {
switch (view.getId()) {
case R.id.button3:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("你确定要退出吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
builder.setNegativeButton("取消", null);
builder.show();
//AlertDialog dialog=builder.create();
// dialog.show();;
break;
case R.id.button5:
showPopWindow(view);
break;
}
}
//设置PopWindow
private void showPopWindow(View view) {
//实例化对象
View v=LayoutInflater.from(this).inflate(R.layout.tanchuang,null);
//第一个参数为弹窗转化成的view,第二个,第三个为弹窗的宽高,第四个参数为是否获取焦点
//这个为设置背景为透明色的背景
PopupWindow window=new PopupWindow(v,400,80,true);
//设置能相应外部的点击事件
window.setOutsideTouchable(true);
//设置弹窗能响应点击事件
window.setTouchable(true);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//创建动画资源 创建一个style风格应用动画资源 对当前弹窗的动画风格设置为第二部的动画索引
window.setAnimationStyle(R.style.fengge);
//参数1(anchorma),就是这个PopWindow显示在哪个地方
window.showAsDropDown(view,-400,0);
//为弹窗中的文本添加点击事件,在布局中找那个空间,永远为findViewById()
//由于我们现在是在popupwindow这里运行,但是我们想要的控件却是在tanchuang里面,而因为
//我们设置popwindow时将tanchuang转化为view,所以我们要v即可
//View v=LayoutInflater.from(this).inflate(R.layout.tanchuang,null);
v.findViewById(R.id.xuanze).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(activity_dialogn.this, "你点击了选择", Toast.LENGTH_SHORT).show();
//点击后弹窗消失
window.dismiss();
}
});
v.findViewById(R.id.fuzhi).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(activity_dialogn.this, "你点击了复制", Toast.LENGTH_SHORT).show();
window.dismiss();
}
});
v.findViewById(R.id.quanxuan).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(activity_dialogn.this, "你点击了全选", Toast.LENGTH_SHORT).show();
window.dismiss();
}
});
}
更多推荐



所有评论(0)