android 搜索:自定义建议布局

android search: customize suggestion layout

我一直在遵循 SearchView 和对话框实现的说明 here。两者都在下面可见。 SO 上有很多问题都集中在自定义搜索框上,但很少有关于自定义 UI 的建议。 (那些做的大约 color/font,默认值对我来说很好。)我希望能够扩大建议以占据整个屏幕宽度。有什么方法可以使用对话框或 SearchView 实现来自定义宽度。我宁愿不使用图书馆,除非那是唯一的选择。如果使用其中一种实现方式可能或更容易做到这一点,那很好。

以下是我的对话框实现方式:

以下是我的 SearchView 实现:

Here 是从 google 地址搜索中选择位置的存储库。它具有全屏搜索列表的实现。

自定义搜索视图

您可以这样做:

第 1 步

只需使用 RecyclerView 或可扩展列表或您想使用的列表创建布局。

第 2 步

在你activity (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());
        }
    }
}
  1. 在你的searchEditText上放一个TextChangeListener
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) {
        }
    });
}

这里suggestList是给你列表

的数据

您应该为搜索结果创建一个 activity 并编写一个布局 xml 文件,其中 listview 或 recyclerview 填充宽度使用 match_parent 值。 内容必须是适配器中的搜索结果。