【中级——高级迈不过去?】Android高级工程师进阶学习——PopupWindow和Dialog区别(完结篇(1)

本文对比了Android中的PopupWindow和Dialog的使用方法,重点讲述了它们在显示位置、响应性、标题、背景等方面的不同,并强调了Dialog的非阻塞特性。同时,文章提到了成为Android高级架构师所需的关键技能和资源链接。
摘要由CSDN通过智能技术生成

自定义Style

定义进入和退出的动画:

进入:

<?xml version="1.0" encoding="utf-8"?> 退出 <?xml version="1.0" encoding="utf-8"?> 动画的style

在指定的位置显示

//显示窗口
window.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置

使用Dialog完成:

定义style

动画: 和popupwindow一致

自定义Dialog:

/**

  • 选择图片对话框
  • Created by chenlijin on 2016/4/12.
    */
    public class SelectPicDialog extends Dialog {
    public SelectPicDialog(Context context, int themeResId) {
    super(context, themeResId);
    }

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_select_pic);
ButterKnife.bind(this);

}

@OnClick({R.id.linearlayout_out,R.id.textview_take_photo, R.id.textview_select_photo, R.id.textview_cancal})
public void onClick(View view) {
switch (view.getId()) {
case R.id.textview_take_photo:
if(listener!=null){
listener.onClickTakePhoto();
}
this.cancel();
break;
case R.id.textview_select_photo:
if(listener!=null){
listener.onClickSelectPic();
}
this.cancel();
break;
case R.id.linearlayout_out:
case R.id.textview_cancal:
this.cancel();
break;
}
}

private OnWindowItemClickListener listener;

public void setOnWindowItemClickListener(OnWindowItemClickListener listener) {
this.listener = listener;
}

public interface OnWindowItemClickListener {
void onClickTakePhoto();
void onClickSelectPic();
}
}

在Activity中调用:

SelectPicDialog dialog = new SelectPicDialog(mContext,R.style.MyDialog);
Window window = dialog.getWindow();
window.setGravity(Gravity.BOTTOM); //此处可以设置dialog显示的位置
window.setWindowAnimations(R.style.mypopwindow_anim_style); //添加动画
dialog.show();
dialog.setOnWindowItemClickListener(new SelectPicDialog.OnWindowItemClickListener(){

@Override
public void onClickTakePhoto() {
startActivityForResult(createCameraIntent(), CREATE_CAMERA); //选择拍照
}

@Override
public void onClickSelectPic() {
startActivityForResult(createPickIntent(), CREATE_PICK); //选择启用系统的选择图片
}
});

详细的区别

(1)Popupwindow在显示之前一定要设置宽高,Dialog无此限制。

(2)Popupwindow默认不会响应物理键盘的back,除非显示设置了popup.setFocusable(true);而在点击back的时候,Dialog会消失。

(3)Popupwindow不会给页面其他的部分添加蒙层,而Dialog会。

(4)Popupwindow没有标题,Dialog默认有标题,可以通过dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消标题

(5)二者显示的时候都要设置Gravity。如果不设置,Dialog默认是Gravity.CENTER。

(6)二者都有默认的背景,都可以通过setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。

其中最本质的差别就是:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。

注意: 这里讲的阻塞并非线程阻塞,而是阻塞了其他UI操作。

最后

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。有**【Android架构视频+BATJ面试专题PDF+核心笔记等资料。希望能够帮助到大家提升技术。如果大家想要获取的话,可以简信我【666】免费获取哦也可点击查看详情**~

高级UI,自定义View

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

如果需要PDF版本可以在群文件夹里,自行领取!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

如何成为Android高级架构师!

架构师必须具备抽象思维和分析的能力,这是你进行系统分析和系统分解的基本素质。只有具备这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。 你如何具备这种能力呢?一是来自于经验,二是来自于学习。

架构师不仅要具备在问题领域上的经验,也需要具备在软件工程领域内的经验。也就是说,架构师必须能够准确得理解需求,然后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度。经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。

但是,如果你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我整理架构师进阶此系列的始动力之一。


成为Android架构师必备知识技能

对应导图的学习笔记(由阿里P8大牛手写,我负责整理成PDF笔记)

部分内容展示

《设计思想解读开源框架》

  • 目录
  • 热修复设计
  • 插件化框架设计

    《360°全方面性能优化》
  • 设计思想与代码质量优化
  • 程序性能优化

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

59724)]

  • 设计思想与代码质量优化
    [外链图片转存中…(img-pCEJsqQe-1712685359724)]
  • 程序性能优化
    [外链图片转存中…(img-syQGhWAZ-1712685359724)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值