API文档 继承树: java.lang.Object ↳ android.widget.PopupWindow 概述: popupWindow,顾名思义,用作在当前Activity前弹出一个界面...,这个界面可以用来展示任何类型的View。...//(使用较少) PopupWindow(View contentView, int width, int height) //创建一个没有获取焦点、长为width、宽为height,内容为contentView...boolean isShowing() //判断当前popup window是否处于显示状态 boolean isSplitTouchEnabled() //判断当前pw是否支持多点触碰...int gravity, int x, int y) /*在特定的地点弹出一个window显示指定的内容 parent:传你当前Layout的id; gravity:Gravity.BOTTOM(
在Android系统中,窗口是有分组概念的,例如,Activity中弹出的所有PopupWindow会随着Activity的隐藏而隐藏,可以说这些都附属于Actvity的子窗口分组,对于Dialog也同样如此...只有应用窗口与系统窗口可以作为父窗口,子窗口不能作为子窗口的父窗口,也就说Activity与Dialog或者系统窗口中可以弹出PopupWindow,但是PopupWindow不能在自己内部弹出PopupWindow...其实这里面就牵扯都Android的窗口组织管理形式,本文主要包含以下几点内容: 窗口的分组管理 :应用窗口组、子窗口组、系统窗口组 Activity、Dialg应用窗口及PopWindow子窗口的添加原理跟注意事项...,这个变量在Activity的attach中创建WindowManagerImpl时传入的为当前Activity的Window,而Activity的Window里面的mAppToken值又为当前Activity...Toast类型的窗口一定处于所有应用窗口之上,不过我们最关心的是Activity类的窗口如何确定Z-order的,在new WindowState之后,只是粗略的确定了Activity窗口的次序,看一下添加窗口的示意代码
一 PopupWindow基本介绍 PopupWindow是Android中的一个弹出窗口控件,它可以在屏幕上方或下方弹出一个类似浮层的视图。...PopupWindow常用于实现一些简单的弹出式菜单、提示信息或自定义的交互界面。...通过PopupWindow,可以在当前Activity的顶层上展示一个新的视图,并且可以设置其位置、大小、动画效果等属性。...getContentView():获取PopupWindow的内容视图。...四 总结 PopupWindow是Android中用于实现弹出式窗口的控件,可以展示自定义的视图,并具有灵活的位置、大小和样式设置。
,弹出选项菜单时只是把已创建好的菜单打开而已,但上下文菜单要在每次打开前才进行创建操作; 3、选中某个菜单项后,上下文菜单会调用onContextMenuClosed方法关闭整个菜单,而选项菜单只是在界面上消失...,并未调用关闭菜单方法onOptionsMenuClosed; 弹窗PopupWindow 在实际开发中,Android自带的菜单显得朴素不够灵活,一个是位置固定,如选项菜单固定从页面底部弹出...PopupWindow的机制是实现一个弹出框,其内容可以是任意布局的View,其页面悬浮在当前Activity页面之上。...要让PopupWindow支持菜单,可在它的内部定义一个ListView,通过展示列表项和列表点击事件,从而实现悬浮菜单的效果。...下面是弹窗的常用方法: PopupWindow构造函数 : 可设置弹窗的视图内容、大小、是否获得焦点等等。
一个弹出窗口控件,可以用来显示任意View,而且会浮动在当前activity的顶部 常用构造方法 一下仅列出本人认为常用的构造方法,全部构造方法(9个….)请查看官方文档。...比如这样一个PopupWindow出现的时候,按back键首先是让PopupWindow消失,第二次按才是退出 activity,准确的说是想退出activity你得首先让PopupWindow消失,因为不并是任何情况下按...实际上, 如果: setFocusable(true); 则PopUpWindow本身可以看作一个类似于模态对话框的东西(但有区别),PopupWindow弹出后,所有的触屏和物理按键都有PopupWindows...比如这样一个PopupWindow出现的时候,按back键首先是让PopupWindow消失,第二次按才是退出activity,准确的说是想退出activity你得首先让PopupWindow消失,因为不并是任何情况下按...而setFocusable(false); 则PopUpWindow只是一个浮现在当前界面上的view而已,不影响当前界面的任何操作。 是一个“没有存在感”的东西。
Android系统是通过Activity栈来管理Activity的,而Activity则是通过哦生命周期来进行自己的创建、活动与销毁等。所以掌握Activity生命周期很有必要。 金字塔模式 ? ...这个模型中包含了Activity的六种状态: Created:创建完成 Started:可见(不可交互) Resumed:可见(活动) Paused:部分可见(后台) Stopped:不可见 Destroyed...,后面两个状态是进入了另一个界面活动,如果打开一个dialog或者透明主题(dialog主题)的Activity,这个时候,只会进入paused状态,不会进入stoped状态。...:alwaysRetainTaskState设置为true时,那么该Activity所在的任务栈将不会受到任何清理命令的影响,一直保持当前任务栈的状态。...应用场景 singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的。..., null); PopupWindow popupWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT...().getDrawable(android.R.drawable.btn_plus)); // popupWindow.setTouchable(true); // popupWindow.setOutsideTouchable...="true" android:text="@string/click" /> popupwindow.xml 实现的效果: ?
一、创建账号 需要的自己去注册,后端云Bmob首页地址:https://www.bmob.cn/ 二、网站后台创建应用(如图) 这里使用的是免费版的 [embl1n9jbw.png] 在这里插入图片描述...--获取GSM(2g)、WCDMA(联通3g)等网络状态的信息 --> android:name="android.permission.ACCESS_NETWORK_STATE...--获取wifi网络状态的信息 --> android:name="android.permission.ACCESS_WIFI_STATE" /> 状态 用于创建BmobInstallation--> android:name="android.permission.READ_PHONE_STATE...有了这个类,你就可以在你的应用程序中添加用户账户功能。BmobUser是BmobObject的一个子类,它继承了BmobObject所有的方法,具有BmobObject相同的功能。
系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间,我们现在就尝试一下如何在活动中使用Toast。 ...可以看到,菜单里的菜单项默认是不会显示出来的,只有点击一下菜单按钮才会弹出里面具体的内容,因此它不会占用任何活动的空间。...2.2.6 销毁一个活动 通过上一节的学习,你已经掌握了手动创建活动的方法,并学会了如何在活动中创建Toast和创建菜单。或许你现在心中会有个疑惑,如何销毁一个活动呢? ...系统最不愿意回收的就是处于运行状态的活动,因为这会带来非常差的用户体验。 暂停状态 当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。...停止状态 当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。
// 如果不设置PopupWindow的背景,有些版本就会出现一个问题:无论是点击外部区域还是Back键都无法dismiss弹框 popupWindow.setBackgroundDrawable(new...先上效果再上代码,代码里面的注释标注了痛点的地方。 上下文菜单效果图 默认向下弹出 ? 下面空间不足时先上弹出 ? ...虽然达不到我要的效果,但是作为学习资源还是不错的,下面贴出代码 import android.app.Activity; import android.graphics.drawable.ColorDrawable...().removeGlobalOnLayoutListener(this); } }); // 如果不设置PopupWindow的背景,有些版本就会出现一个问题...// 必须在创建PopupWindow的时候指定高度,不能用wrap_content popupWindow.showAsDropDown(anchorView);
一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大。此时可能就需要考虑如何分拆整个应用了。...插件化概述 Ø 插件化的概念: Android 插件化 —— 指将一个程序划分为不同的部分,也就说把一个很大的app分成n多个比较小的app,其中有一个app是主app,比如一般 App 的皮肤样式就可以看成一个插件...先上项目效果图: 项目描述:该Demo很简单,就是点击“切换背景”的按钮之后,会弹出一个PopupWindow,里面是一个listview,这个listview里面item显示是插件的名字,点击相应插件的名字...(getResources().getDrawable(R.drawable.kenan1));必须给popupwindow设置一个背景,否则它弹不出来,具体原因请参考popupwindow源码,这里面有一个...,然后进行判断是否是我们主应用的插件,如果是的话,就将其应用程序名字和包名存入一个map集合中,然后添加到我创建的pluginList中,值得强调的一点是,如何确定是我们应用的插件呢?
seekbar是否处于滑动状态,然后在音乐播放的地方,也就是刚才封装的musicplay方法中,更改为如下代码 private void musicplay(int position) {...4.单曲循环,顺序播放,随机播放的实现 实现这个效果,首先我哦们定义一个变量,用于记录当前的播放类型是哪种,如下 // 用于判断当前的播放顺序,0->单曲循环,1->顺序播放,2->随机播放 private...实现主题效果,有很多种方法,我这里采用的是自定义属性的方法,首先我们在values下新建一个文件attrs,内容如下 内容需要根据主题不同而更换,比如popupwindow_bg,即弹出窗口的背景色等等,然后在styles文件文件中指定各个主题下,这些值分别对应哪个具体的值,styles中相关代码如下...attr/popupwindow_bg" 其他属性的使用方法同理,然后我们如何来让用户设置主题呢,可以写一个dialog,也可popupwindow,不过我这里为了学习一下样式为dialog的activity
本文通过一个实例简单介绍下PopupMenu和PopupWindow的区别和各自使用方式。...2.实例基础代码 我们要实现的界面就是上面所示的界面,上下各有两个按钮,点击按钮分别在正确的位置弹出PopupMenu或者PopupWindow,下面是界面代码: <RelativeLayout...); return true; } return false; } 从上面的代码可以看出,不论是点击上面的还是下面的show popup menu按钮,结果都是弹出在当前按钮附近显示...滑入滑出的动画效果代码如下,需要注意的是,PopupWindow需要两个动画:一个进入,一个退出,如果只给定一个动画,可能会看不到动画的效果。...android:duration="200"/> (3)使用PopupWindow还有不少需要注意的地方,例如你上面看到的代码中很多判断popupwindow是否为null或者是否正在显示等,有一个情况是
分析: 1、点击右上角三个点的图标,在界面底部弹出一个区域,这个区域有一些按钮提供给我们操作 2、当该区域出现的时候,详情界面便灰了,也说成透明度变化了 3、当任意选了一个按钮或者点击了该区域以外的部分...--------------------------------------------- 下面通过一个Demo来实现这个需求~~ 效果图: 首先还是布局文件: 1、主界面: 我们只需要在界面的右上角放一个按钮来弹出...PopupWindow ,注意 父容器需要有一个id,因为我们需要它来给PopupWindow设置弹出的位置 android="http://schemas.android.com...PopupWindow的类(根据项目需求决定定义的内容)/** * 自定义PopupWindow , 实现仿QQ空间分享效果 */ public class SelectPopupWindow extends...取消的点击事件,即popupWindow消失后,屏幕的透明度,全透明,就回复原状态 feedSelectPopupWindow.setOnDismissListener(
Android中会维持一个Activity Stack,当一个新Activity创建时,它就会放到栈顶,这个Activity就处于运行状态。...1)mainfest中注册:静态注册的广播接收者就是一个常驻在系统中的全局监听器,也就是说如果你应用中配置了一个静态的BroadcastReceiver,而且你安装了应用而无论应用是否处于运行状态,广播接收者都是已经常驻在系统中了...(7)Popupwindow弹出后,取得了用户操作的响应处理权限,使得其他UI控件不被触发。而AlertDialog弹出后,点击背景,AlertDialog会消失。...3)直接在当前位置使用匿名对象实现,创建一个接口实例。...31、序列化的作用,以及Android两种序列化的区别 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。
作者:vivo 互联网大前端团队- Zhang Xichen 一、背景及问题 某 SDK 有 PopupWindow 弹窗及动效,由于业务场景要求,对于 App 而言,SDK 的弹窗弹出时机具有随机性...(PopupWindow方式) 如何理解Window和View以及ViewRootImpl呢?...在这里我们,简单介绍一下Android屏幕刷新的机制,以及其如何与上述几个核心对象和方法交互,以便于我们更好地进一步分析。...四、编码验证与实践 其实实际中屏幕内容的绘制从来都不是完全在一个线程中完成的,最常见的场景比如: 视频播放时,视频画面的绘制并不是App的主线程及UI线程。...结合工作案例,我们尝试将SDK的整个PopupWindow弹窗整体置于子线程,即为SDK的PopupWindow指定一个独立的UI线程。
大家好我是王大锤,我们老板给我一个任务,让我在任何有网络请求的地方,如果时间超过一秒就提示一个加载中的提示,好去捞客户的钱 。...不过还好我机智,我想:既然需要1秒钟以后才弹出来,思来想去我决定用popuWindow,因为这玩意儿不阻挡当前界面操作,这是我最喜欢的地方。...import android.view.View import android.view.ViewGroup import android.widget.PopupWindow import com.yongxing.QianJR.R...,然后我又遇到了一个问题, 我想在控件的下方正中央显示,可是我获取到的popuwindow的宽度总是0是怎么回事??...配合你自己的网络请求框架或者封装,就可以做到一个提示。 END.
大家好我是王大锤,我们老板给我一个任务,让我在任何有网络请求的地方,如果时间超过一秒就提示一个加载中的提示,好去捞客户的钱 。...不过还好我机智,我想:既然需要1秒钟以后才弹出来,思来想去我决定用popuWindow,因为这玩意儿不阻挡当前界面操作,这是我最喜欢的地方。...import android.view.View import android.view.ViewGroup import android.widget.PopupWindow import com.yongxing.QianJR.R...,然后我又遇到了一个问题, 我想在控件的下方正中央显示,可是我获取到的popuwindow的宽度总是0是怎么回事??...完美,然后我结合自己的网络请求封装,又开了一个 接口 →_→ import android.view.View; import com.xiaolei.easyfreamwork.network.common.SCallBack
以手机QQ 的主界面为例,如下图所示,上面的状态栏是一个窗口,手机QQ 的主界面自然是一个窗口,而弹出的 PopupWindow 也是一个窗口,我们经常使用的 Toast 也是一个窗口。...例如 PopupWindow 是一个窗口,但是分析其源码可以知道,该类并没有创建任何 Window 对象。...例如前面的截图,手机屏幕上显示了三个窗口,状态栏窗口,手Q 主界面窗口,以及一个 PopupWindow。...每个应用窗口创建时,都会创建一个 ViewRootImpl 对象。分析了后面子窗口的创建,以及系统窗口的创建后,我们会知道其实任何一个窗口的创建,最终都是会创建一个 ViewRootImpl对象。...ContextMenu (情景菜单) ContextMenu 是 Android 的一个标准交互,一般是长按一个 View 时,可以显示当前的情景菜单。
onResume() 这个方法在Activity 准备好和用户进行交互的时候调用。此时的Acivity一定位于返回栈的栈顶,并且处于运行状态。...栈内复用模式:如果实例在当前栈中已经存在,就会将当前实例上面的其他实例都移除栈。 单例模式:直接创建一个新的栈并且创建实例放在栈中。...我们知道,生命周期回调都是 AMS 通过 Binder 通知应用进程调用的;而弹出 Dialog、Toast、PopupWindow 本质上都直接是通过 WindowManager.addView()...异常情况下系统配置发生改变时导致Activity被杀死并重新创建、资源内存不足导致低优先级的Activity被杀死 系统会调用onSaveInstanceState来保存当前Activity的状态,此方法调用在...最后我在这里分享一下这段时间从朋友,大佬那里收集到的一些2019-2020BAT 面试真题解析,里面内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、