android搜索:自定义建议布局

lf2*_*215 17 search android android-layout search-suggestion

我一直在与方向沿以下这里两个搜索查看和对话实现.两者都在下面可见.关于自定义搜索框的SO有很多问题,但很少有关于自定义建议UI的问题.(那些是关于颜色/字体,默认情况下对我来说很好.)我希望能够扩大建议占据屏幕的整个宽度.有没有办法使用对话框或SearchView实现自定义宽度.我不想使用库,除非这是唯一的选择.如果这是可能的或更容易,其中一个实现是好的.

这是对话框实现对我来说的样子: 在此输入图像描述

以下是SearchView实现对我来说的样子: 在此输入图像描述

小智 3

您可以这样做: 结果截图

步骤1

只需创建一个布局,其中包含一个RecyclerView或一个可扩展列表或您想要使用的列表。

第2步

在您的活动 ( CityActivity) 中,您需要执行以下操作:

  1. 创建一个像这样的处理程序:
private static class SearchHandler extends Handler {
    private WeakReference<CityActivity> mTarget;

    SearchHandler(CityActivity target) {
        mTarget = new WeakReference<>(target);
    }

    public void setTarget(CityActivity target) {
        mTarget.clear();
        mTarget = new WeakReference<>(target);
    }

    @Override
    public void handleMessage(final Message msg) {
        if (msg.what == CityActivity.TRIGGER_SEARCH) {
            CityActivity activity = mTarget.get();
            activity.makeRequest(mSearchText.trim());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. TextChangeListener你的searchEditText
public void setTextChangeListener() {
    searchView.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) {
            mSearchText = searchView.getText().toString();
            if (!mSearchText.trim().isEmpty()) {
                handler.removeMessages(CitySelectionActivity.TRIGGER_SEARCH);
                handler.sendEmptyMessageDelayed(CityActivity.TRIGGER_SEARCH,
                        CityActivity.SEARCH_TRIGGER_DELAY_IN_MS);
            } else {
                suggestList.clear();
                fillAnything();
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

suggestList是提供给您的列表的数据