前言
什么都不说了,先上效果图
知识点
该功能的实现主要依赖于以下两点
- 载体:DialogFragment(android.support.v4.app)
- Item:代码动态添加
以前写提示框大多是用Dialog,又或者是用PopupWindow。现在换个花样,用DialogFragment来实现。
这里用的是v4包内的DialogFragment,可以支持Android3.0之前的版本,而且android.app.DialogFragment
在API28被弃用了。
DialogFragment extends Fragment
,其父类是Fragment
,所以显示此布局的Activity
必须是FragmentActivity
的子类。
完整代码
Java
BottomPopUpDialog.java
1 | public class BottomPopUpDialog extends DialogFragment { |
BottomPopUpDialog.java
主要是一个 Builder
内部类,用于获取配置参数;
initItemView()
方法,将 Builder
内的mDataArray
转换成PopupDialogItem
显示。
setStyle(),设置显示样式。两个参数setStyle(@DialogStyle int style, @StyleRes int theme)
。
style:DialogFragment提供了4种,STYLE_NORMAL, STYLE_NO_TITLE, STYLE_NO_FRAME, STYLE_NO_INPUT。
theme:自定义样式,指定该dialog样式。当该值为0时,通过style确定具体样式。
1 | /** |
PopupDialogItem.java
1 | public class PopupDialogItem extends LinearLayout { |
MaxHeightScrollView.java
1 | public class MaxHeightScrollView extends ScrollView { |
重写onMeasure
方法,将高度设置为屏幕高度的 2 / 3。
res
bottom_popup_dialog.xml(弹框布局)
1 | <?xml version="1.0" encoding="utf-8"?> |
####item_bottom_popup_dialog.xml(item布局)
1 | <?xml version="1.0" encoding="utf-8"?> |
bg_dialog.xml (背景)
1 | <?xml version="1.0" encoding="utf-8"?> |
colors.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
arrays.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
使用
1 | new BottomPopUpDialog.Builder() |