最近做了个需求,后台返回了一个列表数据地址,实现下拉选择框,之前直接用了系统Spinner结果需要添加模糊查询功能找了很久的资料发现各个方案都不太一样本来想要自己写一个的结果发现了一个大佬写的跟需求差不多拿来改了一些。

public class AppCompatEditSpinner {
    /**
     * 使用SimpleAdapter加载数据
     * <p>
     * 需要在
     * {@link AppCompatEditSpinner#setMatchIgnoreCase(boolean)}、
     * {@link AppCompatEditSpinner#setMatchTextColor(String)}、
     * {@link AppCompatEditSpinner#setSpinnerItemTextColor(int)}、
     * {@link AppCompatEditSpinner#setSpinnerItemTextSize(int)}、
     * {@link AppCompatEditSpinner#setSpinnerBackground(int)}
     * 属性设置之后调用。
     */
    public void setItemData(List<String> data);
    
     /**
     * 使用继承{@link BaseEditSpinnerAdapter}的适配器加载数据
     * <p>
     * 需要在
     * {@link AppCompatEditSpinner#setMatchIgnoreCase(boolean)}、
     * {@link AppCompatEditSpinner#setMatchTextColor(String)}、
     * {@link AppCompatEditSpinner#setSpinnerItemTextColor(int)}、
     * {@link AppCompatEditSpinner#setSpinnerItemTextSize(int)}、
     * {@link AppCompatEditSpinner#setSpinnerBackground(int)}
     * 属性设置之后调用
     */
    public void setAdapter(BaseEditSpinnerAdapter adapter);
    
     /**
     * 设置文本
     */
    public void setText(@StringRes int text);

    /**
     * 设置文本
     */
    public void setText(String text);

    /**
     * 设置Hint文本
     */
    public void setHint(@StringRes int hint);

    /**
     * 设置Hint文本
     */
    public void setHint(String hint);

    /**
     * 设置Hint的文本颜色
     */
    public void setHintTextColor(@ColorInt int color);

    /**
     * 设置背景
     */
    public void setEditBackgroundResource(@DrawableRes int resource);

    /**
     * 设置输入文字字体大小,单位:sp
     */
    public void setEditTextSize(int size);

    /**
     * 设置输入文字颜色
     */
    public void setEditTextColor(@ColorInt int color);

    /**
     * 设置输入限制最大行数
     */
    public void setEditMaxLines(int maxLines);

    /**
     * 设置输入限制最大字符长度
     */
    public void setEditMaxLength(int maxLength);

    /**
     * 设置输入限制类型
     * <p>
     * 例如:{@link  InputType#TYPE_CLASS_TEXT}
     */
    public void setEditInputType(int inputType);

    /**
     * 设置输入限制字符
     */
    public void setEditDigits(@StringRes int digits);

    /**
     * 设置输入限制字符
     */
    public void setEditDigits(String digits);

    /**
     * 设置是否隐藏右侧下拉选图标
     */
    public void setRightImageGone(boolean rightImageGone);

    /**
     * 右侧图片展开下拉选时是否显示全部数据,默认:点击时显示和当前输入匹配的数据
     */
    public void setRightImageDropShowAllItem(boolean rightImageDropShowAllItem);

    /**
     * 匹配字符的颜色,忽略字母大小写时,此属性无效
     *
     * <p>
     * 必须在{@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)} 调用之前进行设置
     * <p>
     * {@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)} 调用后不可再次修改
     *
     * @param matchTextColor RGB形式,需要包含#号,例如:“#000000”
     */
    public void setMatchTextColor(String matchTextColor);

    /**
     * 匹配字符时是否忽略字母大小写,默认不忽略。
     *
     * <p>
     * 必须在{@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)}调用之前进行设置
     * <p>
     * {@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)} 调用后不可再次修改
     */
    public void setMatchIgnoreCase(boolean matchIgnoreCase);

    /**
     * 待选项的颜色,默认黑色
     *
     * <p>
     * 必须在{@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)}调用之前进行设置
     * <p>
     * {@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)} 调用后不可再次修改
     */
    public void setSpinnerItemTextColor(@ColorInt int spinnerItemTextColor);

    /**
     * 待选项的字体大小,单位sp。
     *
     * <p>
     * 必须在{@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)}调用之前进行设置
     * <p>
     * {@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)} 调用后不可再次修改
     */
    public void setSpinnerItemTextSize(int spinnerItemTextSize);

    /**
     * 待选项的背景
     *
     * <p>
     * 必须在{@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)}调用之前进行设置
     * <p>
     * {@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)} 调用后不可再次修改
     */
    public void setSpinnerBackground(Drawable spinnerBackground);

    /**
     * 待选项的背景
     *
     * <p>
     * 必须在{@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)}调用之前进行设置
     * <p>
     * {@link AppCompatEditSpinner#setItemData(List)}
     * 或者{@link AppCompatEditSpinner#setAdapter(BaseEditSpinnerAdapter)} 调用后不可再次修改
     */
    @SuppressLint("UseCompatLoadingForDrawables")
    public void setSpinnerBackground(@DrawableRes int spinnerBackground);

    /**
     * 获取输入的文本
     */
    public String getText();

    /**
     * 设置下拉选图标
     */
    public void setRightImageDrawable(Drawable drawable);

    /**
     * 设置下拉选图标
     */
    public void setRightImageResource(@DrawableRes int res);

    /**
     * 获取输入控件EditText,可做特殊配置
     */
    public AppCompatEditText getEditText();

    /**
     * 获取右侧ImageView,可做特殊配置
     */
    public AppCompatImageView getRightImageView();
}

基本上开放性挺高的