Skip to content

7. 也许你想要这些效果

Jun edited this page May 14, 2021 · 3 revisions

介绍

XPopup目前完全可以胜任项目中任何弹窗需求了,但是有些不常见的效果,Demo中没有演示,在这里做个补充说明。也许下面这些效果是你想要的。

不完整的Drawer弹窗效果

默认情况下Drawer弹窗效果是高度充满的,但是也许你想要下面这样的效果:

要知道,弹窗的本质是一个View,所以可以通过设置marginTop来实现,只需在onCreate中这样设置即可:

//通过设置topMargin,可以让Drawer弹窗进行局部阴影展示
ViewGroup.MarginLayoutParams params = (MarginLayoutParams) getPopupContentView().getLayoutParams();
params.topMargin = 450;

这个topMargin的值需要你自己调整到合适的位置。

联想搜索

其实Demo中有,但贴个代码:


        final BasePopupView popupView = new XPopup.Builder(this)
                .atView(editText)
                .isViewMode(true)      //开启View实现
                .isRequestFocus(false) //不强制焦点
                .isClickThrough(true)  //点击透传
                .hasShadowBg(false)
                .popupAnimation(PopupAnimation.ScaleAlphaFromCenter)
                .asAttachList(new String[]{"联想到的内容 - 1", "联想到的内容 - 2", "联想到的内容 - 333"}, null, new OnSelectListener() {
                    @Override
                    public void onSelect(int position, String text) {
                        Toast.makeText(XPopupApp.context, text, Toast.LENGTH_LONG).show();
                    }
                });
        //监听输入的时候,显示弹窗
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) { }
            @Override
            public void afterTextChanged(Editable s) {
                if(s.toString().isEmpty()){
                    popupView.dismiss();
                    return;
                }
                if(popupView.isDismiss()){
                    popupView.show();
                }
            }
        });