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(); } }); }
更多推荐
已为社区贡献1条内容
所有评论(0)