自定义弹框通常可以使用 自定义的popupwindow,自定义的activity,自定义的dialog来实现  这里先用popupwindow来实现 并且可以在弹框上实现点击事件 或者在其所依附的activity上响应  其实都是一样的  但是如果点击弹框想在activity上处理事件 这种就比较简单了 避免了使用接口对接

第一种    在弹框上响应点击事件

先准备资源文件

alert_dialo.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    ><LinearLayout
        android:id="@+id/pop_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:background="@drawable/btn_style_alert_dialog_background"
        ><Button
            android:id="@+id/btn_take_photo"

            android:layout_marginTop="20dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="拍照"
            android:background="@drawable/btn_style_alert_dialog_button"
            android:textStyle="bold"
            /><Button
            android:id="@+id/btn_pick_photo"

            android:layout_marginTop="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="从相册选择"
            android:background="@drawable/btn_style_alert_dialog_button"
            android:textStyle="bold"
            /><Button
            android:id="@+id/btn_cancel"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="15dip"
            android:layout_marginBottom="15dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="取消"
            android:background="@drawable/btn_style_alert_dialog_cancel"
            android:textColor="#ffffff"
            android:textStyle="bold"

            /></LinearLayout>
</RelativeLayout>
资源文件对应的类
package com.example.administrator.zidingyipupwindow;import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.Toast;public class SelectPicPopupWindow extends PopupWindow {private Button btn_take_photo, btn_pick_photo, btn_cancel;private View mMenuView;public SelectPicPopupWindow(final Activity context, OnClickListener itemsOnClick) {super(context);LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);mMenuView = inflater.inflate(R.layout.alert_dialog, null);btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo);btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo);btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);//取消按钮
        btn_cancel.setOnClickListener(new OnClickListener() {public void onClick(View v) {//销毁弹出框
                dismiss();}});//设置按钮监听
        btn_pick_photo.setOnClickListener(new OnClickListener() {@Override
            public void onClick(View v) {Toast.makeText(context, "挑选照片", Toast.LENGTH_SHORT).show();}});btn_take_photo.setOnClickListener(new OnClickListener() {@Override
            public void onClick(View v) {Toast.makeText(context, "拍照", Toast.LENGTH_SHORT).show();}});//设置SelectPicPopupWindow的View
        this.setContentView(mMenuView);//设置SelectPicPopupWindow弹出窗体的宽
        this.setWidth(LayoutParams.FILL_PARENT);//设置SelectPicPopupWindow弹出窗体的高
        this.setHeight(LayoutParams.WRAP_CONTENT);//设置SelectPicPopupWindow弹出窗体可点击
        this.setFocusable(true);//设置SelectPicPopupWindow弹出窗体动画效果
        this.setAnimationStyle(R.style.AnimBottom);//实例化一个ColorDrawable颜色为半透明
        ColorDrawable dw = new ColorDrawable(0xb0000000);//设置SelectPicPopupWindow弹出窗体的背景
        this.setBackgroundDrawable(dw);//mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
        mMenuView.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {int height = mMenuView.findViewById(R.id.pop_layout).getTop();int y=(int) event.getY();if(event.getAction()==MotionEvent.ACTION_UP){if(y<height){dismiss();}}return true;}});}}  
R.style.AnimBottom

@anim/pop_exit_anim
这里面 
@anim/pop_exit_anim 和@anim/pop_exit_anim都是在新建的anim里
下面是mainactivity里的资源文件
activity_main.xml
   
所对应的类 即是mainactivity里的东西
以上是点击事件在弹框里处理  既是相应的挑选 拍照吐司 里
第二种 
第二种 方式 是点击事件在 activity中处理只需要在mainactivity中加上几句话  让其变为
package com.example.administrator.zidingyipupwindow;import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;public class MainActivity extends Activity {//自定义的弹出框类
    SelectPicPopupWindow menuWindow;@Override
    public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = (TextView) this.findViewById(R.id.text);//把文字控件添加监听,点击弹出自定义窗口
        tv.setOnClickListener(new OnClickListener() {public void onClick(View v) {//实例化SelectPicPopupWindow
                menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);//显示窗口
                menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置
            }});}//为弹出窗口实现监听类
    private OnClickListener  itemsOnClick = new OnClickListener(){public void onClick(View v) {menuWindow.dismiss();switch (v.getId()) {case R.id.btn_take_photo:
//                    Toast.makeText(MainActivity.this, "拍照---", Toast.LENGTH_SHORT).show();
                    break;case R.id.btn_pick_photo:
//                    Toast.makeText(MainActivity.this, "嘻嘻---", Toast.LENGTH_SHORT).show();
                    break;default:break;}}};}  
  并且   在
SelectPicPopupWindow中  把设置按钮监听去掉 就OK了
package com.example.administrator.zidingyipupwindow;import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;public class MainActivity extends Activity {//自定义的弹出框类
    SelectPicPopupWindow menuWindow;@Override
    public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = (TextView) this.findViewById(R.id.text);//把文字控件添加监听,点击弹出自定义窗口
        tv.setOnClickListener(new OnClickListener() {public void onClick(View v) {//实例化SelectPicPopupWindow
                menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);//显示窗口
                menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置
            }});}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:id="@+id/main"
    android:orientation="vertical"
    ><TextView
        android:id="@+id/text"
        android:layout_width="50dip"
        android:layout_height="30dip"
        android:textSize="20sp"
        android:text="点我"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate
        android:duration="450"

        android:toYDelta="100%p"/><!--<alpha-->
        <!--android:duration="200"-->
        <!--android:fromAlpha="1.0"-->
        <!--android:toAlpha="0.0" />-->
</set
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><!--<translate-->
        <!--android:duration="450"-->
        <!--android:fromYDelta="100%p"-->
        <!--android:toYDelta="0" />-->
    <alpha
        android:duration="200"
        android:fromAlpha="0"
        android:toAlpha="1.0" />// %p指相对于父容器<translate
        android:fromYDelta="100%p"
        android:duration="300"
        />
</set>
@anim/pop_enter_anim
<style name="AnimBottom" parent="android:Animation"><item name="android:windowEnterAnimation">@anim/pop_enter_anim</item><item name="android:windowExitAnimation">@anim/pop_exit_anim</item>
</style>

自定义弹框一(PopupWindow实现) 响应两种点击事件相关推荐

  1. react离开页面,自定义弹框拦截,路由拦截

    前言: 项目有个需求是:跳转路由,在离开页面前,需要弹框询问用户是否确定离开. 用react-router的<Prompt>组件是可以的,但是,怎么使用antd组件(或者说自定义组件)呢? ...

  2. android 系统弹框与自定义弹框

    1. 系统弹框 private AlertDialog alertDialog; private void tipDialog(String value) {         if (alertDia ...

  3. element-ui 自定义弹框,加入图片

    element 组件库里面有弹框组件. 实际项目中需要用到弹框.需求是在弹框的div里面放入一张图片. 用到的是element弹框组件的最后一个.自定义弹框组件 const h = this.$cre ...

  4. jq js 自定义弹框

    自定义弹框 <body> <script type="text/javascript" src="./js/jquery-1.8.3.js"& ...

  5. 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模

    MNProgressHUD 项目地址:maning0303/MNProgressHUD  简介: 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 S ...

  6. 抖音短视频系统开发自定义弹框

    我们如果想要实现这样的自定义弹框,需要怎么做呢,接下来就是教程 首先,我们需要创建一个类继承Dialog 下面就是代码 import android.annotation.SuppressLint; ...

  7. 1. 使用Popup组件自定义弹框提示页面

    Popup的基本使用 在QT中,经常使用QMessageBox进行弹框的提示,而在QML中并没有这个功能,但是可以利用Popup组件进行自定义弹框的设计. 该组件可以理解为是一个空白区域,默认的vis ...

  8. uniapp自定义弹框

    uniapp自定义弹框,适用所有类型 效果原理 创建一个vue页面 pages.json配置 一般tabbar中间按钮点击出现弹框 注意事项 效果原理 利用透明页面,点击进入当前页面,内容根据自己需求 ...

  9. 搜索计算机无法输入法,Windows10左下角搜索框无法输入字符的两种解决方法

    用户在使用win10系统过程中,经常会使用到其自带的搜索功能.不过,近来有些用户却发现电脑左下角的搜索框突然无法输入字符.那这该怎么办呢?我们最常用的方法是重启电脑,让win10的搜索服务重新运行.下 ...

最新文章

  1. python 上传文件到网络设备_基于python实现上传文件到OSS代码实例
  2. C/C++中退出线程的四种解决方法
  3. javashop配置微信支付
  4. 屏幕颜色拾取器 (VC++)
  5. STM8S103之IO复用
  6. P3376 【模板】网络最大流
  7. 网络空间安全 渗透 攻防5(文件共享服务器)
  8. 抢不到回家的票,还真不是12306技术不行
  9. 大乐斗2服务器维护,腾讯《QQ宠物》、《乐斗Ⅱ》正式停止运营
  10. Python3的unichr()消失了?不,升级了!
  11. minigui之显示gif
  12. CHROME扩展笔记之webRequest·图片拦截
  13. 安装java环境----血泪版
  14. 交叉编译Qt5.9.6
  15. C++ 域名转IP地址
  16. 计算机主题科技小报,《主题电脑小报制作》教案
  17. CSS第二部分——网页布局三大核心
  18. java 函数 作为参数_如何在Java中将函数作为参数传递?
  19. ITMO大学内部:网络物理系统实验室
  20. 利用EMCP物联网云平台通过网口远程监控S7-200 Smart PLC云组态

热门文章

  1. 数学建模 --- 层次分析法(AHP模型)
  2. 华夏名网十周年盛大感恩优惠活动
  3. 基于FPGA的DDS参考设计
  4. MobaxTerm中文乱码问题解决
  5. 宁波区块链联盟正式成立 inTouch社交能否成为区块链领域的又一匹黑马?
  6. 微信小程序-入门到入土-01
  7. win10右键点击桌面图标闪屏,wps卸载
  8. C++ 实现BMP位图读写
  9. 将虚拟机VMware从C盘移动到E盘
  10. 漏洞之XML实体注入