云端网 - www.ydw.org
2018年安卓巴士全球开发者论坛-杭州站
【1.13杭州站沙龙】主持小姐姐让我跟大家说她是单身···
距离活动开始还有三天,杭州的开发者们赶快报名行动起来吧!
前言
文章代码示例已放到上了,有需要的朋友可以去看下,欢迎star和fork,项目会一直维护,有疑问可以提或留言.
文章目录
一.的由来
所有框架的由来都是为了更方便,更高效的解决问题,也一样,是为了在项目中更高效的实现项目的弹窗效果.
是继承自进行封装的,大部分开发者在实现弹窗效果的时候,会首选系统提供的;
但是使用系统的在某些情况下会出现问题,最常见的场景是当手机屏幕旋转时弹窗会消失,并抛出一个系统,这个异常不会导致异常崩溃,因为开发者知道这个问题,并进行了处理.
使用起来其实更简单,但是却是推荐尽量使用.
1.的优点
1.在项目build.文件中添加依赖
'com.timmy.::1.1.3'
2.或者中使用
.(nager()) .(R..) .( 600) .( 800) .(. this, 0.5f) .t(. this, 0.6f) .( "") .( 0.6f) .(.) .r( r() {
@( ){ .(, ""); } }) .(R.id., ) .er( er() {
@( ,View view, ){ } }) .() .show(); 使用方法解析
的实现原理和系统原理差不多,主要使用设计模式实现
1.创建弹窗,必须传入xml布局文件,且自己设置背景色,因为默认是透明背景色
.(nager()) .(R..) .() .show();
2.设置弹窗的宽高(如果不设置宽或者高,默认使用包裹内容的高度)
.(nager()) .(R..) .( 600) //设置弹窗固定宽度(单位:px).( 800) //设置弹窗固定高度.(. this, 0.5f) //动态设置弹窗宽度为屏幕宽度百分比(取值0-1f).t(. this, 0.6f) //设置弹窗高度为屏幕高度百分比(取值0-1f).() .show();
3.设置弹窗展示的位置
.(.)其他位置有:. / .LEFT等等和设置控件位置一样
4.设置弹窗背景色透明度(取值0-1f,0为全透明)
.( 0.6f)
5.当弹窗需要动态改变控件子view内容时,这里借鉴了.的设计思想,内部封装好一个
.r( r() {
@( ){ .(, ""); }})
6.监听弹窗子控件的点击事件,内部也是通过实现
(ids[])只需要将点击事件控件的id传入,并设置回调接口er()
.(R.id., ).er( er() {
@( ,View view1, ){
(view1.getId()) {
caseR.id.: Toast.(. this, "", Toast.).show(); .();
break;
: Toast.(. this, "", Toast.).show();
break; } }})
7.设置底部列表弹窗
.(nager()) .( 600) .( this, 0.8f) .(.) .( (R.., .(data)) {
@( , , s){ .(, s); } }) .( .() {
@( , , s, ){ Toast.(y. this, "click:"+ s, Toast.).show(); .(); } }) .() .show(); 列表弹窗
为了方便使用:
不用传入布局文件,内部设置了一个默认的布局,且的控件id为,背景为#
(),设置的,为了封装的item点击事件,传入的需要为的实现类
(),设置的点击事件
实现:需要使用者传入item的xml布局,和List数据
. {
tRes;
datas;
ener;
;
( , , T t);
(@ , List datas){
this. = ;
this.datas = datas; }
@ ( , ){
der(.from(.()).(, , false)); }
@( , ){ (, , datas.get()); ..( .() {
@Click(View v){ ener.(, , datas.get(), ); } }); }
@(){
.size(); }
( ){
this. = ; }
r {
( , , T t, ); }
( ){
this.ener = ; }} 如果使用者需要使用自己的列表布局时,可以使用(,)方法设置xml布局和布局管理器,切记xml布局中的的id必须设置为(如效果图中的分享弹窗)//底部分享g(View view){
.(nager()) .(R..r, er( this, ., false)) .( this, 1.0f) .(.) .( (R.., .()) {
@( , , s){ .(, s); } }) .( .() {
@( , , item, ){ Toast.(y. this, item, Toast.).show(); .(); } }) .() .show();}
自定义列表布局
框架原理解析
的实现原理主要分为三步
实例化.对象,然后调用各种()方法设置数据,设置的数据都保存在.实例中
()方法调用后才会实例化对象,并将.中设置的数据传递到的属性对象中
show()方法调用显示弹窗
项目地址:
www.ydw.org - 云端网