弹出窗是Android中非常重要的组件,它可以给用户予以信息提示、选择,增强用户交互体验。

XUIPopup

包括简单的自定义布局的XUIPopup以及内嵌ListView的XUIListPopup和XUISimplePopup。可定义向上弹出和向下弹出,并且弹出的指示箭头是自适应的。

XUIPopup

  • 演示效果

PopupWindow - 图1

  • 使用案例
1. mNormalPopup = new XUIPopup(getContext());
2. TextView textView = new TextView(getContext());
3. textView.setLayoutParams(mNormalPopup.generateLayoutParam(
4. DensityUtils.dp2px(getContext(), 250),
5. WRAP_CONTENT
6. ));
7. textView.setLineSpacing(DensityUtils.dp2px(4), 1.0f);
8. int padding = DensityUtils.dp2px(20);
9. textView.setPadding(padding, padding, padding, padding);
10. textView.setText("Popup 可以设置其位置以及显示和隐藏的动画");
11. textView.setTextColor(ContextCompat.getColor(getContext(), R.color.xui_config_color_sub_title_common_explain_text));
12. mNormalPopup.setContentView(textView);
13. mNormalPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {
14. @Override
15. public void onDismiss() {
16. mBtnCommonPopup.setText("显示普通浮层");
17. }
18. });
19. mNormalPopup.setAnimStyle(XUIPopup.ANIM_GROW_FROM_CENTER);
20. mNormalPopup.setPreferredDirection(XUIPopup.DIRECTION_TOP);
21. mNormalPopup.show(v);
  • 常用方法

1.设置自定义布局:setContentView(View root)

2.设置弹窗弹出的动画:setAnimStyle(int animStyle)

3.设置消失的监听:setOnDismissListener(PopupWindow.OnDismissListener listener)

4.设置弹出的方向:setPreferredDirection(int preferredDirection)

XUIListPopup

  • 演示效果

PopupWindow - 图2

  • 使用案例
1. String[] listItems = new String[]{
2. "Item 1",
3. "Item 2",
4. "Item 3",
5. "Item 4",
6. "Item 5",
7. };

9. XUISimpleAdapter adapter = XUISimpleAdapter.create(getContext(), listItems);
10. mListPopup = new XUIListPopup(getContext(), adapter);
11. mListPopup.create(DensityUtils.dp2px(200), DensityUtils.dp2px(150), new AdapterView.OnItemClickListener() {
12. @Override
13. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
14. ToastUtils.toast("Item " + (i + 1));
15. mListPopup.dismiss();
16. }
17. });
18. mListPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {
19. @Override
20. public void onDismiss() {
21. mBtnListPopup.setText("显示列表浮层");
22. }
23. });
24. mListPopup.setAnimStyle(XUIPopup.ANIM_GROW_FROM_CENTER);
25. mListPopup.setPreferredDirection(XUIPopup.DIRECTION_TOP);
26. mListPopup.show(v);
  • 常用方法

1.创建弹窗:

2. T create(int width, int maxHeight, AdapterView.OnItemClickListener onItemClickListener)
3. T create(int width, int maxHeight)
4. T create(int width)

2.设置是否有分割线:T setHasDivider(boolean hasDivider)

3.设置分割线的资源:T setDivider(Drawable divider)

4.设置分割线的高度:T setDividerHeight(int dividerHeight)

XUISimplePopup

  • 演示效果

PopupWindow - 图3

  • 使用案例
1. mMenuPopup = new XUISimplePopup(getContext(), DemoDataProvider.menuItems)
2. .create(new XUISimplePopup.OnPopupItemClickListener() {
3. @Override
4. public void onItemClick(XUISimpleAdapter adapter, AdapterItem item, int position) {
5. ToastUtils.toast(item.getTitle().toString());
6. }
7. });
8. mMenuPopup.showDown(v);
  • 常用方法

1.设置条目点击监听:T setOnPopupItemClickListener(final OnPopupItemClickListener onItemClickListener)

2.向下显示:showDown(View v)

3.向上显示:showUp(View v)

EasyPopup

对系统的PopupWindow进行的简单代理封装,方便PopupWindow的自定义和操作,支持上、下、左、右4种弹出位置。自定义的PopupWindow可继承BaseCustomPopup轻松实现。

  • 使用案例
1. mCirclePop = new EasyPopup(getContext())
2. .setContentView(R.layout.layout_friend_circle_comment)
3. .setFocusAndOutsideEnable(true)
4. .createPopup();

6. TextView tvZan = mCirclePop.getView(R.id.tv_zan);
7. TextView tvComment = mCirclePop.getView(R.id.tv_comment);
8. tvZan.setOnClickListener(new View.OnClickListener() {
9. @Override
10. public void onClick(View v) {
11. ToastUtils.toast("点赞");
12. mCirclePop.dismiss();
13. }
14. });

16. tvComment.setOnClickListener(new View.OnClickListener() {
17. @Override
18. public void onClick(View v) {
19. ToastUtils.toast("评论");
20. mCirclePop.dismiss();
21. }
22. });
23. mCirclePop.showAtAnchorView(mBtnCircleComment, VerticalGravity.CENTER, HorizontalGravity.LEFT, 0, 0);
  • 常用方法

1.设置自定义布局内容

2. T setContentView(View contentView);
3. T setContentView(int layoutId);
4. T setContentView(View contentView, int width, int height)

2.设置宽高

2. T setWidth(int width);
3. T setHeight(int height);

3.设置显示的对齐方式

2. T setVerticalGravity(@VerticalGravity int verticalGravity);
3. T setHorizontalGravity(@VerticalGravity int horizontalGravity);

4.设置动画的样式

2. T setAnimationStyle(@StyleRes int animationStyle);

5.设置是否可以点击PopupWindow之外的地方dismiss

2. T setFocusAndOutsideEnable(boolean focusAndOutsideEnable)

6.设置监听

2. T setOnDismissListener(PopupWindow.OnDismissListener listener)
3. T setOnAttachedWindowListener(OnAttachedWindowListener listener)

7.弹窗显示

(1)相对anchor view显示:

1. void showAtAnchorView(@NonNull View anchor, @VerticalGravity final int vertGravity, @HorizontalGravity int horizGravity, int x, int y);

(2)PopupWindow自带的显示方法:

1. void showAsDropDown(View anchor, int offsetX, int offsetY);

ViewTooltip

控件提示弹出窗,可自定义弹出的位置,持续时间以及样式。

  • 演示效果

PopupWindow - 图4

  • 使用案例
1. ViewTooltip
2. .on(mEditText)
3. .color(Color.BLACK)
4. .position(ViewTooltip.Position.LEFT)
5. .text("Some tooltip with long text")
6. .clickToHide(true)
7. .autoHide(false, 0)
8. .animation(new ViewTooltip.FadeTooltipAnimation(500))
9. .onDisplay(new ViewTooltip.ListenerDisplay() {
10. @Override
11. public void onDisplay(View view) {
12. ToastUtils.toast("onDisplay");
13. }
14. })
15. .onHide(new ViewTooltip.ListenerHide() {
16. @Override
17. public void onHide(View view) {
18. ToastUtils.toast("onHide");
19. }
20. })
21. .show();
  • 常用方法

1.创建并设置提示控件依附的View:ViewTooltip on(final View view)

2.设置提示显示的相对位置:position(Position position)

3.设置自定义提示布局:customView(View customView)

4.设置提示持续的时间:duration(long duration)

5.设置提示框的背景颜色:color(int color)

6.设置显示和隐藏的监听:

2. onDisplay(ListenerDisplay listener);
3. onHide(ListenerHide listener);

7.设置间隔的距离:padding(int left, int top, int right, int bottom)

8.设置显示和隐藏的动画:animation(TooltipAnimation tooltipAnimation)

9.设置提示的文字:text(String text)

10.设置圆角的角度:corner(int corner)

11.设置提示文字的颜色:textColor(int textColor)

12.设置提示文字的字体大小:textSize(int unit, float textSize)

13.设置是否点击隐藏:clickToHide(boolean clickToHide)

CookieBar

顶部和底部信息消息显示条, 类似Snackbar,支持自定义布局。

  • 演示效果

PopupWindow - 图5

  • 使用案例
1. CookieBar.builder(getActivity())
2. .setTitle(R.string.cookie_title)
3. .setIcon(R.mipmap.ic_launcher)
4. .setMessage(R.string.cookie_message)
5. .setLayoutGravity(Gravity.BOTTOM)
6. .setAction(R.string.cookie_action, new View.OnClickListener() {
7. @Override
8. public void onClick(View view) {
9. ToastUtils.toast("点击消失!");
10. }
11. })
12. .show();

14. CookieBar.builder(getActivity())
15. .setTitle(R.string.cookie_title)
16. .setMessage(R.string.cookie_message)
17. .setDuration(3000)
18. .setBackgroundColor(R.color.colorPrimary)
19. .setActionColor(android.R.color.white)
20. .setTitleColor(android.R.color.white)
21. .setAction(R.string.cookie_action, new View.OnClickListener() {
22. @Override
23. public void onClick(View view) {
24. ToastUtils.toast("点击消失!");
25. }
26. })
27. .show();

XToast

自定义Toast样式

  • 使用案例
1. XToast.error(getContext(), R.string.error_message).show();
2. XToast.success(getContext(), R.string.success_message).show();
3. XToast.info(getContext(), R.string.info_message).show();
4. XToast.warning(getContext(), R.string.warning_message).show();
5. XToast.normal(getContext(), R.string.normal_message_without_icon).show();