PopupWindow(弹窗)

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值