android 自定义 popupwindow,Android自定义弹出窗口PopupWindow使用技巧

PopupWindow是Android上自定义弹出窗口,使用起来很方便。

PopupWindow的构造函数为

public PopupWindow(View contentView, int width, int height, boolean focusable)

contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。

focusable为是否可以获得焦点,这是一个很重要的参数,也可以通过public void setFocusable(boolean focusable)来设置,如果focusable为false,在一个Activity弹出一个PopupWindow,按返回键,由于PopupWindow没有焦点,会直接退出Activity。如果focusable为true,PopupWindow弹出后,所有的触屏和物理按键都有PopupWindows处理。

如果PopupWindow中有Editor的话,focusable要为true。

下面实现一个简单的PopupWindow

主界面的layout为:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/layout_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

android:id="@+id/btn_test_popupwindow"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="@string/app_name" />

PopupWindow的layout为:

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="#000000" >

android:layout_width="wrap_content"

android:layout_height="80dp"

android:text="@string/app_name"

android:textColor="#ffffffff"

android:layout_centerInParent="true"

android:gravity="center"/>

Activity的代码为:

public class MainActivity extends Activity {

private Button mButton;

private PopupWindow mPopupWindow;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

View popupView = getLayoutInflater().inflate(R.layout.layout_popupwindow, null);

mPopupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);

mPopupWindow.setTouchable(true);

mPopupWindow.setOutsideTouchable(true);

mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

mButton = (Button) findViewById(R.id.btn_test_popupwindow);

mButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mPopupWindow.showAsDropDown(v);

}

});

}

}

这三行代码

mPopupWindow.setTouchable(true);

mPopupWindow.setOutsideTouchable(true);

mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

的作用是点击空白处的时候PopupWindow会消失。

mPopupWindow.showAsDropDown(v);这一行代码将PopupWindow以一种向下弹出的动画的形式显示出来

public void showAsDropDown(View anchor, int xoff, int yoff)这个函数的第一个参数为一个View,我们这里是一个Button,那么PopupWindow会在这个Button下面显示,xoff,yoff为显示位置的偏移。

点击按钮,就会显示出PopupWindow

9eb47a5b37928ff0f9b791cce1055aea.gif

很多时候我们把PopupWindow用作自定义的菜单,需要一个从底部向上弹出的效果,这就需要为PopupWindow添加动画。

在工程res下新建anim文件夹,在anim文件夹先新建两个xml文件

menu_bottombar_in.xml

android:duration="250"

android:fromYDelta="100.0%"

android:toYDelta="0.0" />

menu_bottombar_out.xml

android:duration="250"

android:fromYDelta="0.0"

android:toYDelta="100%" />

在res/value/styles.xml添加一个sytle

@anim/menu_bottombar_in

@anim/menu_bottombar_out

Acivity修改为

public class MainActivity extends Activity {

private PopupWindow mPopupWindow;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

View popupView = getLayoutInflater().inflate(R.layout.layout_popupwindow, null);

mPopupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);

mPopupWindow.setTouchable(true);

mPopupWindow.setOutsideTouchable(true);

mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

mPopupWindow.getContentView().setFocusableInTouchMode(true);

mPopupWindow.getContentView().setFocusable(true);

mPopupWindow.getContentView().setOnKeyListener(new OnKeyListener() {

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0

&& event.getAction() == KeyEvent.ACTION_DOWN) {

if (mPopupWindow != null && mPopupWindow.isShowing()) {

mPopupWindow.dismiss();

}

return true;

}

return false;

}

});

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {

if (mPopupWindow != null && !mPopupWindow.isShowing()) {

mPopupWindow.showAtLocation(findViewById(R.id.layout_main), Gravity.BOTTOM, 0, 0);

}

return true;

}

return super.onKeyDown(keyCode, event);

}

}

这样点击菜单键会弹出自定义的PopupWindow,点击空白处或者返回键、菜单键,PopupWindow会消失。

文章如果有不对的地方,希望大家理解。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android lottie字体json,Android 动画深入Lottie

image.png如果现在有需求,让这个小人做出拳击动作你应该如何做? 传统方法会写一大堆的路径值做路径动画,不好调试代码臃肿并且麻烦,那么有简单方法吗 有! SVG 和 Lottie 可以胜任 SVG编辑麻烦美工不太会弄,那么我们用Lottie 下面…

android 搜索工具栏,Android记事本在菜单栏添加搜索按钮方法

效果图这个app结构和我之前将记事本开发的博客基本一致,我这里直接讲一下怎样添加使用的开发软件为android studio首先在res目录下新建文件夹menu,添加目录布局文件main_menu之后在main_menu中添加如下代码xmlns:app"http://schemas.android.com/ap…

5分钟k线数据 存储_成功率极高的“分时K线战法”:15分钟K线战法+30分钟K线战法...

实战看盘最常用的就是日、周、月等K线图。这些图形对于我们分析个股走势的确帮助很大,然而遇到调整时,就显示了其宏观有余、微观不足的缺点。但假如我们用分时K线图进行微观的观察与分析,就可以找到一些个股在调整中的规律,比如15…

nfc卡模式与标准模式_张家口市环卫进入首都标准“京环模式”

“路上看不见垃圾,垃圾箱更卫生了,路边公共设施齐全了。”喜欢晨练的王先生最近格外喜欢在河边便道上散步,切身感受城市环境面貌改善带来的获得感。而这背后,除了环卫工作者的付出,也见证了张家口市城乡环卫一体化项目…

pyqt 取鼠标处文字_爱剪辑:炫彩的动态标题文字特效,这招让视频片头LOGO更酷炫...

爱剪辑学习委员会提醒您:道路千万条,学习第一条。教程不学会,制作两行泪。今天教大家制作炫彩的动态标题文字特效,3步即可快速学会,让你立马不再流泪。爱剪辑官网下载:http://www.aijianji.com/爱剪辑LOGO效…

android studio 搭建环境,Android studio搭建xposed环境

一、环境准备xposed:https://repo.xposed.info/module/de.robv.android.xposed.installerxposed-api:https://forum.xda-developers.com/xposed/xposed-api-changelog-developer-news-t2714067二、环境搭建Android studio选择->Empty Actvity将api.ja…

强化学习原理与python实现原理pdf_纯Python实现!Facebook发布PyTorch分布式强化学习库...

图灵TOPIA来源:Facebook编译:刘静图灵联邦编辑部出品Facebook于近日发布了PyTorch中用于强化学习(RL)研究的平台:TorchBeast。TorchBeast实现了流行的IMPALA算法的一个版本,用于RL代理的快速、异步、并行训练。另外,To…

鸿蒙开发还可以用安卓,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…

深入浅出强化学习_直播 | 深入浅出理解 A3C 强化学习

强化学习是一种比较传统的人工智能手段,在近年来随着深度学习的发展,强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能,最令我们瞩目的莫过于 AlphaGo 战胜李世石,以及 OpenAI 团队的机器人可以在…

鸿蒙os2.0公测机型,鸿蒙OS2.0第二期第三期公测机型陆续公布 麒麟980和麒麟820将登场...

继官方透露鸿蒙OS2.0将开始大规模推送之后,在第一批为华为Mate X2,Mate40系列等系列机型推送后,近期官方再次开启了鸿蒙系统(HarmonyOS 20开发者Beta)的第二期公测,在原有机型的基础上再次增加了nova系列的6款机型,根据…

如何截取_【实用技巧】如何截取网页长图

最近需要截取一个网页长图,搜了下发现 Chrome 浏览器实现起来比较简单,顺便记录分享下。准备:Chrome 浏览器【1】用 Chrome 浏览器打开网页【2】按下 F12 进入开发者工具页面【3】点击工具栏中“切换设备”选项(图标看着像手机/Pad)【4】左侧…

三星升级android9,没买的不必看!三星手机各机升级Android 9.0 时间表

原标题:没买的不必看!三星手机各机升级Android 9.0 时间表在此之前Samsung 在Samsung 的会员应用程序中给我们公布了旗下设备在什么时间节点升级至Android 9.0系统的路线图。用户更新至最新的Android 9.0之后,用户将会得到全新的One UI&#…

js微信监听返回_微信小程序(2)- 框架结构amp;运行环境

一、小程序框架结构小程序框架分场景获取、逻辑层和视图层场景获取:场景值是用来描述用户进入小程序的路径,可以在小程序的生命周期onLaunch 或 onShow 里获取。也可以通过wx.getLaunchOptionsSync来获取场景值。详细的场景列表可以在下面文档查看。微信…

html中怎样播放本地视频教程,【Axure9基础教程】内联框架如何引入本地音频 视频 HTML PDF等本地文件...

在【在讲解如何插入本地文件之前需要先讲两个概念,相对路径和绝对路径,了解了这两个概览后,才能顺利的插入本地文件并识别成功绝对路径和相对路径是什么?相对路径:相对路径就是相对于当前文件的路径,以引用文件之网页…

oralce load的时候使用触发器会导致load慢吗_你真的了解性能压测中的SLA吗?

作者简介:襄玲(花名),阿里巴巴技术专家,PTS 研发,近期主导整理和推动云时代性能压测的思想和标准,云计算性能测试国标项目组成员,内部稳定性保障系统之预热系统负责人。本文是《Performance Test Together》(简称PTT)系…

arduino 停止程序_极路由1S OpenWrt开机自启程序及串口调试

如何给openwrt添加启动项?首先在/etc/init.d中创建一个文件,在CRT终端中直接用vi命令即可,自行创建startCamera文件,如下图所示。vi编辑器中输入下图所示内容,START50表示系统启动的优先顺序,数字越小越优先…

隐藏鼠标指针_Mac鼠标光标消失怎么办?苹果电脑鼠标指针不显示的解决方法

在小编使用mac电脑的过程中发现,鼠标光标会偶尔在Mac上消失。这种情况完全是随机的,任何时候都有可能发生。经过几次之后小编发现,当使用诸如Photoshop之类的大型软件并连接多个显示器时,鼠标光标可能消失的几率最大。或者使用Saf…

realtek网卡mac硬改工具_七彩虹联合Realtek发布粉色固态硬盘 首发评测

七彩虹是PC行业领先的科技企业,其中在板卡领域是大陆第一的品牌,而在存储领域也常常被行业称为四大金刚之一。小螃蟹瑞昱(Realtek)是领先的专业IC设计公司,其中广为大家所认知的是网卡芯片、声卡芯片——这两个领域几乎是霸主地位。同时在WiF…

微型计算机继电器控制,可编程控制器与微机及继电器控制的区别 -解决方案-华强电子网...

1. PC与MC控制的区别简而言之,MC是通用的专用机,而PC则是专用的通用机。从微型计算机的应用范围来说,MC是通用机,而PC是专用机。微型计算机是在以往计算机与大规模集成电路的基础上发展起来的,它最大特征是运算速度快&…

计算机与自动化专业有哪些学校,全国自动化专业大学排名

自动化专业大学排名已经公布啦,下面由出国留学网小编为你精心准备了“2020自动化专业大学排名公布”,持续关注本站将可以持续获取更多的考试资讯!2020自动化专业大学排名公布自动化专业最好的大学有哪几所,中国哪些本科大学自动化专业实力最强…