自定义弹框一(PopupWindow实现) 响应两种点击事件
自定义弹框通常可以使用 自定义的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实现) 响应两种点击事件相关推荐
- react离开页面,自定义弹框拦截,路由拦截
前言: 项目有个需求是:跳转路由,在离开页面前,需要弹框询问用户是否确定离开. 用react-router的<Prompt>组件是可以的,但是,怎么使用antd组件(或者说自定义组件)呢? ...
- android 系统弹框与自定义弹框
1. 系统弹框 private AlertDialog alertDialog; private void tipDialog(String value) { if (alertDia ...
- element-ui 自定义弹框,加入图片
element 组件库里面有弹框组件. 实际项目中需要用到弹框.需求是在弹框的div里面放入一张图片. 用到的是element弹框组件的最后一个.自定义弹框组件 const h = this.$cre ...
- jq js 自定义弹框
自定义弹框 <body> <script type="text/javascript" src="./js/jquery-1.8.3.js"& ...
- 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模
MNProgressHUD 项目地址:maning0303/MNProgressHUD 简介: 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 S ...
- 抖音短视频系统开发自定义弹框
我们如果想要实现这样的自定义弹框,需要怎么做呢,接下来就是教程 首先,我们需要创建一个类继承Dialog 下面就是代码 import android.annotation.SuppressLint; ...
- 1. 使用Popup组件自定义弹框提示页面
Popup的基本使用 在QT中,经常使用QMessageBox进行弹框的提示,而在QML中并没有这个功能,但是可以利用Popup组件进行自定义弹框的设计. 该组件可以理解为是一个空白区域,默认的vis ...
- uniapp自定义弹框
uniapp自定义弹框,适用所有类型 效果原理 创建一个vue页面 pages.json配置 一般tabbar中间按钮点击出现弹框 注意事项 效果原理 利用透明页面,点击进入当前页面,内容根据自己需求 ...
- 搜索计算机无法输入法,Windows10左下角搜索框无法输入字符的两种解决方法
用户在使用win10系统过程中,经常会使用到其自带的搜索功能.不过,近来有些用户却发现电脑左下角的搜索框突然无法输入字符.那这该怎么办呢?我们最常用的方法是重启电脑,让win10的搜索服务重新运行.下 ...
最新文章
- python 上传文件到网络设备_基于python实现上传文件到OSS代码实例
- C/C++中退出线程的四种解决方法
- javashop配置微信支付
- 屏幕颜色拾取器 (VC++)
- STM8S103之IO复用
- P3376 【模板】网络最大流
- 网络空间安全 渗透 攻防5(文件共享服务器)
- 抢不到回家的票,还真不是12306技术不行
- 大乐斗2服务器维护,腾讯《QQ宠物》、《乐斗Ⅱ》正式停止运营
- Python3的unichr()消失了?不,升级了!
- minigui之显示gif
- CHROME扩展笔记之webRequest·图片拦截
- 安装java环境----血泪版
- 交叉编译Qt5.9.6
- C++ 域名转IP地址
- 计算机主题科技小报,《主题电脑小报制作》教案
- CSS第二部分——网页布局三大核心
- java 函数 作为参数_如何在Java中将函数作为参数传递?
- ITMO大学内部:网络物理系统实验室
- 利用EMCP物联网云平台通过网口远程监控S7-200 Smart PLC云组态