弹出窗是Android中非常重要的组件,它可以给用户予以信息提示、选择,增强用户交互体验。
XUIPopup
包括简单的自定义布局的XUIPopup以及内嵌ListView的XUIListPopup和XUISimplePopup。可定义向上弹出和向下弹出,并且弹出的指示箭头是自适应的。
XUIPopup
- 演示效果

- 使用案例
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
- 演示效果

- 使用案例
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
- 演示效果

- 使用案例
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
控件提示弹出窗,可自定义弹出的位置,持续时间以及样式。
- 演示效果

- 使用案例
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,支持自定义布局。
- 演示效果

- 使用案例
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();
