简介

qmui 提供一个浮层,支持自定义浮层的内容,支持在指定 View 的任一方向旁边展示该浮层,支持自定义浮层出现/消失的动画。

开始使用

qmui

  1. 引入库
    请确保配置了 JCenter 仓库源,然后直接引用:
    implementation "com.qmuiteam:qmui:2.0.0-alpha10"
    至此,QMUI 已被引入项目中。

  2. 配置主题
    把项目的 theme 的 parent 指向 QMUI.Compat,至此,QMUI 可以正常工作。
    <style name="Theme.QMUIDemo" parent="QMUI.Compat.NoActionBar"></style>

普通 PopupWindow

1. 效果图

2. 代码

private void showNormalPop(View view) {TextView textView = new TextView(App.CONTEXT);textView.setLineSpacing(QMUIDisplayHelper.dp2px(this, 4), 1.0f);int padding = QMUIDisplayHelper.dp2px(this, 20);textView.setPadding(padding, padding, padding, padding);textView.setText("QMUIPopup 可以设置其位置以及显示和隐藏的动画");textView.setTextColor(Color.BLUE);QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)).preferredDirection(QMUIPopup.DIRECTION_BOTTOM).view(textView).skinManager(QMUISkinManager.defaultInstance(this)).edgeProtection(QMUIDisplayHelper.dp2px(this, 20)).offsetX(QMUIDisplayHelper.dp2px(this, 20)).offsetYIfBottom(QMUIDisplayHelper.dp2px(this, 5)).shadow(true).arrow(true).animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER).onDismiss(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {Toast.makeText(PopupActivity.this, "onDismiss", Toast.LENGTH_SHORT).show();}}).show(view);}

带遮罩层 PopupWindow

1. 效果图

2. 代码

private void showPop(View view) {TextView textView = new TextView(this);textView.setLineSpacing(QMUIDisplayHelper.dp2px(this, 4), 1.0f);int padding = QMUIDisplayHelper.dp2px(this, 20);textView.setPadding(padding, padding, padding, padding);textView.setText("通过 dimAmount() 设置背景遮罩");textView.setTextColor(Color.BLUE);QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)).preferredDirection(QMUIPopup.DIRECTION_BOTTOM).view(textView).edgeProtection(QMUIDisplayHelper.dp2px(this, 20)).dimAmount(0.6f).animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER).skinManager(QMUISkinManager.defaultInstance(this)).onDismiss(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {Toast.makeText(PopupActivity.this, "onDismiss", Toast.LENGTH_SHORT).show();}}).show(view);}

动态更新 PopupWindow

1. 代码

private void showLoadingPop(View view) {final TextView textView = new TextView(this);textView.setLineSpacing(QMUIDisplayHelper.dp2px(this, 4), 1.0f);int padding = QMUIDisplayHelper.dp2px(this, 20);textView.setPadding(padding, padding, padding, padding);textView.setText("加载中...");textView.setTextColor(ContextCompat.getColor(this, R.color.app_color_description));QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)).preferredDirection(QMUIPopup.DIRECTION_BOTTOM).view(textView).edgeProtection(QMUIDisplayHelper.dp2px(this, 20)).dimAmount(0.6f).skinManager(QMUISkinManager.defaultInstance(this)).animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER).onDismiss(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {Toast.makeText(PopupActivity.this, "onDismiss", Toast.LENGTH_SHORT).show();}}).show(view);// 这里只是演示,实际情况应该考虑数据加载完成而 Popup 被 dismiss 的情况textView.postDelayed(new Runnable() {@Overridepublic void run() {textView.setText("使用 Popup 最好是一开始就确定内容宽高," +"如果宽高位置会变化,系统会有一个的移动动画不受控制,体验并不好");}}, 2000);}

带关闭按钮 PopupWindow

1. 效果图

2. 代码

private void showPopupWindow(View view) {QMUISkinValueBuilder builder = QMUISkinValueBuilder.acquire();QMUIFrameLayout frameLayout = new QMUIFrameLayout(this);frameLayout.setBackground(QMUIResHelper.getAttrDrawable(this, R.attr.qmui_skin_support_popup_bg));builder.background(R.attr.qmui_skin_support_popup_bg);QMUISkinHelper.setSkinValue(frameLayout, builder);frameLayout.setRadius(QMUIDisplayHelper.dp2px(this, 12));int padding = QMUIDisplayHelper.dp2px(this, 20);frameLayout.setPadding(padding, padding, padding, padding);TextView textView = new TextView(this);textView.setLineSpacing(QMUIDisplayHelper.dp2px(this, 4), 1.0f);textView.setPadding(padding, padding, padding, padding);textView.setText("这是自定义显示的内容");textView.setTextColor(Color.BLUE);builder.clear();builder.textColor(R.attr.app_skin_common_title_text_color);QMUISkinHelper.setSkinValue(textView, builder);textView.setGravity(Gravity.CENTER);builder.release();int size = QMUIDisplayHelper.dp2px(this, 200);FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(size, size);frameLayout.addView(textView, lp);QMUIPopups.fullScreenPopup(this).addView(frameLayout).closeBtn(true).skinManager(QMUISkinManager.defaultInstance(this)).onBlankClick(new QMUIFullScreenPopup.OnBlankClickListener() {@Overridepublic void onBlankClick(QMUIFullScreenPopup popup) {Toast.makeText(PopupActivity.this, "点击到空白区域", Toast.LENGTH_SHORT).show();}}).onDismiss(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {Toast.makeText(PopupActivity.this, "onDismiss", Toast.LENGTH_SHORT).show();}}).show(view);}

快捷菜单 PopupWindow

1. 效果图

2. 代码

private void showMenuPopup(View view) {QMUIPopups.quickAction(this,QMUIDisplayHelper.dp2px(this, 56),QMUIDisplayHelper.dp2px(this, 56)).shadow(true).skinManager(QMUISkinManager.defaultInstance(this)).edgeProtection(QMUIDisplayHelper.dp2px(this, 20)).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_copy).text("复制").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "复制成功", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_line).text("划线").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "划线成功", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_share).text("分享").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "分享成功", Toast.LENGTH_SHORT).show();}})).show(view);}

快捷菜单(多 Item) PopupWindow

1. 效果图

2. 代码

private void showMoreMenuPopup(View view) {QMUIPopups.quickAction(this,QMUIDisplayHelper.dp2px(this, 56),QMUIDisplayHelper.dp2px(this, 56)).shadow(true).skinManager(QMUISkinManager.defaultInstance(this)).edgeProtection(QMUIDisplayHelper.dp2px(this, 20)).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_copy).text("复制").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "复制成功", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_line).text("划线").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "划线成功", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_share).text("分享").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "分享成功", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_delete_line).text("删除划线").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "删除划线成功", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_dict).text("词典").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "打开词典", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_share).text("圈圈").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "查询成功", Toast.LENGTH_SHORT).show();}})).addAction(new QMUIQuickAction.Action().icon(R.drawable.icon_quick_action_dict).text("查询").onClick(new QMUIQuickAction.OnClickListener() {@Overridepublic void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) {quickAction.dismiss();Toast.makeText(PopupActivity.this, "查询成功", Toast.LENGTH_SHORT).show();}})).show(view);}

【Kevin Learn QMUI】--> QMUIPopup相关推荐

  1. 【Kevin Learn QMUI】--> QMUIBottomSheet

    简介 在 Dialog 的基础上重新定制了 show() 和 hide() 时的动画效果, 使 Dialog 在界面底部升起和降下.提供了以下两个面板样式: 列表样式:使用 QMUIBottomShe ...

  2. 【Kevin Learn QMUI】-->qmui 知识梳理

    不断学习,做更好的自己!

  3. 【Kevin Learn QMUI】--> QMUISlider

    不断学习,做更好的自己!

  4. 【Kevin Learn QMUI】--> Android Studio 大黄蜂使用介绍

    不断学习,做更好的自己!

  5. 【Kevin Learn QMUI】--> QMUIViewPager

    不断学习,做更好的自己!

  6. 【Kevin Learn QMUI】-->QMUIDialog

    不断学习,做更好的自己!

  7. 【Kevin Learn QMUI】-->QMUILinkTextView

    不断学习,做更好的自己!

  8. 【Kevin Learn QMUI】-->QMUITipDialog

    不断学习,做更好的自己!

  9. 【Kevin Learn QMUI】--> QMUIProgressBar

    不断学习,做更好的自己!

最新文章

  1. sketch如何做设计稿交互_当屏幕可以折叠,交互设计怎么做
  2. 脑机接口EEG信号分类算法
  3. McAfee ENS
  4. 3层、5层、3层一个卷积核BP神经网络性能比较
  5. Spring Remoting: Remote Method Invocation (RMI)--转
  6. openwrt 遍译php_[OpenWrt Wiki] OpenWrt编译 – 说明
  7. 串口服务器怎么测信号,串口服务器如何调试
  8. 【计算机本科补全计划】Mysql 学习小计(2)
  9. 一日一技:Ocelot网关使用IdentityServer4认证
  10. 求数组的最大值php,求PHP数组最大值,最小值的代码
  11. 十年数据分析经验,总结出这三类分析工具最好用
  12. 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
  13. CentOS7和Ubuntu16设置静态ip的方法
  14. paip.java c# .net php python调用c++ c dll so windows api 总结
  15. 用户只有一部手机,怎么保护私钥—— mixin如何实现资产安全
  16. 主机炸鸡?Z世代主机市场终究是肯德基的?
  17. JAVA打包成EXE文件,能在没有jre环境的电脑上运行
  18. 代码评审的价值和规范
  19. Java小游戏之《大鱼吃小鱼》
  20. NYoj21 三个水杯

热门文章

  1. 创意的舞台——WEBGAME面面观
  2. 谁说夫妻之间没有爱情只剩亲情?
  3. 业余草总结常见计算广告点击率预估算法
  4. Oracle笔记之PS/SQL数据库程序设计语言 第一篇
  5. 企业开发:选Flex?还是HTML5?
  6. 使用edge浏览器,白嫖ChatGPT的保姆级教程来了
  7. 导出mysql数据库表生成word文档
  8. 实现FCFS和SJF调度算法(电梯调度算法详解)
  9. Linux系统编程——进程
  10. PHP环境配置(基于xampp)