Android:PopWindow — 對Android的底部彈窗、頂部彈窗選單及自定義介面的使用封裝
轉載請註明出處:http ://blog.csdn.net/hmyang314/article/details/70613478
PopWindow
對Android的底部彈窗,頂部彈窗選單及自定義介面的使用封裝。
GitHub:https://github.com/HMY314/PopWindow
一,介紹
主要是用於在彈窗中顯示一些有限的選單項,也支援新增自定義View,有如下3中彈出方式:
1、底部彈出,主要參考預設風格是參考IOS的UIAlertController,可以新增自定義View;
2、底部彈出,從頂部向下彈出的效果,同時支援控制按鈕執行動畫,預設是旋轉動畫;
3、螢幕中間彈出
二,核心類PopWindow
PopWindow採用Build模式,可以像AlertDialog一樣方便的使用,通過PopWindowStyle控制彈窗的顯示方式:
public enum PopWindowStyle {
PopUp, PopDown, PopAlert
}
控制不同的彈窗的主要類是:PopUpWindow、PopDownWindow、PopAlertDialog
三,使用方法
第一種
PopWindow popWindow = new PopWindow.Builder(this)
.setStyle(PopWindow.PopWindowStyle.PopUp)
.setTitle("注意")
.setMessage("今天天氣不錯")
.addItemAction(new PopItemAction("選項1"))
.addItemAction(new PopItemAction("選項2", PopItemAction.PopItemStyle.Normal))
.addItemAction(new PopItemAction("選項3", PopItemAction.PopItemStyle.Normal, new PopItemAction.OnClickListener() {
@Override
public void onClick() {
Toast.makeText(MainActivity.this, "選項3", Toast.LENGTH_SHORT).show();
}
}))
.addItemAction(new PopItemAction("確定", PopItemAction.PopItemStyle.Warning, new PopItemAction.OnClickListener() {
@Override
public void onClick() {
Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
}
}))
.addItemAction(new PopItemAction("取消", PopItemAction.PopItemStyle.Cancel))
.create();
popWindow.show();
第二種
View customView = View.inflate(this, R.layout.layout_test, null);
new PopWindow.Builder(this)
.setStyle(PopWindow.PopWindowStyle.PopDown)
.setIsShowCircleBackground(false)
.addItemAction(new PopItemAction("選項1"))
.addContentView(customView)
.addItemAction(new PopItemAction("選項2"))
.addItemAction(new PopItemAction("取消", PopItemAction.PopItemStyle.Cancel, new PopItemAction.OnClickListener() {
@Override
public void onClick() {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
}))
.setPopWindowMargins(dip2px(10), dip2px(0), dip2px(10), dip2px(0))
.setControlViewAnim(mArrowIv, R.anim.btn_rotate_anim_1, R.anim.btn_rotate_anim_2, true)
.show(view);
更多效果請看程式碼
四,使用封裝
在demo中有個PopWindowController類,是對一些特殊的使用進行了再次封裝,大家可以根據自己的實際使用情況進行封裝。
public class PopWindowController {
public static PopWindow showPopDownList(Activity activity, BaseAdapter adapter, View controlView, View rotateView,
int[] margins, AdapterView.OnItemClickListener listener) {
return showPopDownList(activity, adapter, controlView, rotateView, true, margins, listener);
}
public static PopWindow showPopDownList(Activity activity, BaseAdapter adapter, View controlView, View rotateView,
boolean rotateViewAnim, int[] margins, AdapterView.OnItemClickListener listener) {
Animation openAnim = AnimationUtils.loadAnimation(activity, R.anim.btn_rotate_anim_1);
Animation closeAnim = AnimationUtils.loadAnimation(activity, R.anim.btn_rotate_anim_2);
return showPopDownList(activity, adapter, controlView, rotateView, openAnim, closeAnim, rotateViewAnim, margins, listener);
}
public static PopWindow showPopDownList(Activity activity, BaseAdapter adapter, View controlView, View rotateView, int openAnimId,
int closeAnimId, boolean rotateViewAnim, int[] margins,
AdapterView.OnItemClickListener listener) {
Animation openAnim = AnimationUtils.loadAnimation(activity, openAnimId);
Animation closeAnim = AnimationUtils.loadAnimation(activity, closeAnimId);
return showPopDownList(activity, adapter, controlView, rotateView, openAnim, closeAnim, rotateViewAnim, margins, listener);
}
/**
* 以ListView方式向下彈出框
*
* @param activity
* @param adapter
* @param controlView 操作顯示出彈框的按鈕
* @param rotateView 要旋轉的按鈕
* @param openAnim 旋轉按鈕開啟動畫
* @param closeAnim 旋轉按鈕關閉動畫
* @param rotateViewAnim 是否顯示旋轉動畫
* @param margins margins[0]:leftMargin、margins[1]:topMargin、margins[2]:rightMargin、margins[3]:bottomMargin
* @param listener
* @return
*/
public static PopWindow showPopDownList(Activity activity, final BaseAdapter adapter, View controlView, View rotateView,
Animation openAnim, Animation closeAnim, boolean rotateViewAnim, int[] margins,
AdapterView.OnItemClickListener listener) {
final ListView listView = new ListView(activity);
listView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
listView.setDivider(null);
listView.setOnItemClickListener(listener);
listView.setAdapter(adapter);
int leftMargin = 0, topMargin = 0, rightMargin = 0, bottomMargin = 0;
if (margins != null) {
for (int i = 0; i < margins.length; i++) {
if (i == 0) {
leftMargin = margins[i];
} else if (i == 1) {
topMargin = margins[i];
} else if (i == 2) {
rightMargin = margins[i];
} else if (i == 3) {
bottomMargin = margins[i];
}
}
}
PopWindow popWindow = new PopWindow.Builder(activity)
.setStyle(PopWindow.PopWindowStyle.PopDown)
.setView(listView)
.setControlViewAnim(rotateView, openAnim, closeAnim, rotateViewAnim)
.setPopWindowMargins(leftMargin, topMargin, rightMargin, bottomMargin)
.create();
popWindow.show(controlView);
return popWindow;
}
}
相關文章
- react-native 仿原生自定義彈窗|iOS/Android 彈窗效果ReactiOSAndroid
- 小程式自定義modal彈窗封裝實現封裝
- avalonia自定義彈窗
- WPF 自定義MessageBox 彈窗提示 彈窗載入
- 自定義版本更新彈窗
- uniapp 自定義彈窗元件APP元件
- avalonia實現自定義小彈窗
- 封裝React AntD的dialog彈窗元件封裝React元件
- 封裝Vue Element的dialog彈窗元件封裝Vue元件
- 從底部彈出Dialog視窗
- fastadmin新增自定義按鈕,並使用彈窗功能AST
- Android彈窗二則: PopupWindow和AlertDialogAndroid
- Android之Window和彈窗問題Android
- iOS學習筆記--PresentedVC自定義彈窗iOS筆記
- 表格單元格點選操作(彈窗)
- 【vue系列】封裝公共彈窗元件的正確方式Vue封裝元件
- svelte元件:Svelte自定義彈窗Popup元件|svelte移動端彈框元件元件
- Android通用業務彈窗管理方案PopLayerV1Android
- Android通用業務彈窗管理方案PopLayerV2Android
- Android彈窗元件工作機制之Dialog、DialogFragment(一)Android元件Fragment
- 直播軟體開發,工具類的自定義彈窗效果
- 34.qt quick-Popup彈出視窗自定義QTUI
- 基於NuxtJS/Vue自定義彈層元件|Vue長按彈窗|Vue全域性對話方塊UXJSVue元件
- 簡單的網頁彈窗陷阱網頁
- 直播平臺原始碼,Android中常用Dialog彈窗效果原始碼Android
- react.js自定義pc桌面端對話方塊|react仿layer彈窗ReactJS
- iView之Modal(一級彈窗和二級彈窗)View
- (轉)Android 自定義Dialog實現步驟及封裝Android封裝
- 彈出視窗
- 去除nag彈窗
- 學習筆記(二十八):ArkUi-自定義彈窗 (CustomDialog)筆記UI
- ArcGIS實現打點、線路圖、色塊、自定義彈窗
- 鴻蒙專案實戰(三):自定義彈窗開發實踐鴻蒙
- 基於mpvue的簡單彈窗元件mptoastVue元件AST
- iOS自定義控制元件:精簡的底部彈框iOS控制元件
- Flutter 全域性彈窗Flutter
- 移動端彈窗
- 彈出視窗messagebox
- Prism 彈出視窗