1.概述
PopupLayout是通用弹出布局辅助库,允许开发者从顶部、底部、左侧、右侧和中心这五个位置弹出自己指定的View,此外还提供圆角和动画特性。
2.效果预览

PS:本库的更多效果可以参考Github上的Gif演示(Github地址)
3.基本用法
Gradle配置
//根项目下的build.gradle
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
//主项目下的build.gradle
dependencies {
implementation 'com.github.CodingEnding:PopupLayout:v1.0'
}
基本使用
PopupLayout的使用非常简单,只需要执行以下两步:
1.初始化PopupLayout
通过调用静态方法init初始化PopupLayout。这个方法有两个参数:第一个参数是Context对象,第二个参数代表弹出布局的内容,可以将layout资源Id或者View对象作为参数传入,如下所示:
//1.使用layout资源Id作为弹出布局的内容
PopupLayout popupLayout=PopupLayout.init(MainActivity.this, R.layout.layout_left);
//2.使用View作为弹出布局的内容
View view=View.inflate(MainActivity.this,R.layout.layout_bottom_menu,null);
PopupLayout popupLayout=PopupLayout.init(MainActivity.this,view);
2.在指定位置显示弹出布局
PopupLayout可以从屏幕顶部、底部、左侧、右侧和中心弹出(默认从底部弹出),如下所示:
//从左侧弹出
popupLayout.show(PopupLayout.POSITION_LEFT);
//默认从底部弹出
popupLayout.show();
position的可选值:
- POSITION_LEFT
- POSITION_RIGHT
- POSITION_CENTER
- POSITION_TOP
- POSITION_BOTTOM
关闭弹出布局
点击弹出布局之外的区域,PopupLayout会被自动关闭。当然,也可以通过调用dismiss或hide方法手动关闭。这两个方法的区别在于hide只是隐藏弹出布局,并不会释放资源;而dismiss会销毁弹出布局并释放资源。通常情况下,建议使用dismiss方法。
public void dismiss()
public void hide()
注意:在Activity退出时必须使用dismiss方法销毁弹出布局,释放资源。
限制弹出布局的大小
默认情况下,PopupLayout会根据不同的弹出位置自动适配弹出布局的大小。具体而言,如果从顶部/底部弹出,宽度为MATCH_PARENT,高度为WRAP_CONTENT;如果从左侧/右侧弹出,宽度为WRAP_CONTENT,高度为MATCH_PARENT;如果从中心弹出,宽度为WRAP_CONTENT,高度为WRAP_CONTENT。
当然,PopupLayout也提供了setHeight和setWidth两个方法用于手动设置弹出布局的大小。这两个方法原型如下:
/**
* 设置弹出布局的高度
* @param height 高度
* @param dpMode 是否以dp为单位
*/
public void setHeight(int height,boolean dpMode)
/**
* 设置弹出布局的宽度
* @param width 宽度
* @param dpMode 是否以dp为单位
*/
public void setWidth(int width,boolean dpMode)
注意:这两个方法必须要在调用show方法之前使用才有效。
相关方法
| 方法名 | 返回值 | 说明 |
|---|---|---|
| static init(Context context,@LayoutRes int contentLayoutId) | PopupLayout | 初始化弹出布局 |
| static init(Context context,View contentView) | PopupLayout | 初始化弹出布局 |
| show(int position) | void | 从指定位置显示弹出布局 |
| show() | void | 默认从底部显示弹出布局 |
| dismiss() | void | 隐藏弹出布局(同时会销毁弹出布局,释放资源),建议使用 |
| hide() | void | 隐藏弹出布局(不会销毁弹出布局),不会触发DismissListener |
| setUseRadius(boolean useRadius) | void | 是否使用圆角特性(默认使用) |
| setHeight(int height,boolean dpMode) | void | 设置弹出布局的高度 |
| setWidth(int width,boolean dpMode) | void | 设置弹出布局的宽度 |
| setDismissListener(DismissListener dismissListener) | void | 设置Dismiss监听器(在弹出布局消失时触发) |
监听器
PopupLayout允许使用者监听弹出布局的消失事件,只需要为PopupLayout设置DismissListener即可,如下所示:
PopupLayout popupLayout=PopupLayout.init(MainActivity.this, R.layout.layout_bottom);
popupLayout.setDismissListener(new PopupLayout.DismissListener() {
@Override
public void onDismiss() {
Toast.makeText(MainActivity.this,"弹出窗口关闭",Toast.LENGTH_SHORT).show();
}
});//添加监听器
4.实现思路
简单来说,PopupLayout使用Dialog的方式来实现弹出自定义View。在本库中有一个自定义的Dialog子类,它的布局文件中主要是一个FrameLayout。外界传入的View(layout资源Id会被解析为View对象)最终都会被添加到这个FrameLayout中。
PopupLayout实际上是一个辅助类,负责根据外界调用的方法改变Dialog的具体配置信息,如弹出位置(Window的gravity属性)、窗体大小(LayoutParams)、设置监听器等。
此外,本库还针对不同的弹出位置,为Dialog提供了不同的布局动画,以及为布局提供了可选的圆角特性等。
更多的细节可以参考Github上的代码。
Android自定义View:PopupLayout详解
本文介绍了Android自定义View组件PopupLayout,它是一个通用的弹出布局库,支持从五个方向弹出,并具有圆角和动画效果。内容包括:初始化、显示位置、关闭方式、尺寸限制、监听器的使用方法以及实现思路。同时提供了Github仓库链接以查看详细代码和更多示例。
1809

被折叠的 条评论
为什么被折叠?



