android搜索:自定义建议布局

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

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

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

这是你如何做到的: 结果截图

步骤1

只需使用RecyclerView或可扩展列表或列表创建一个布局,无论您要使用哪个。

第2步

在您的活动( CityActivity )中,您需要这样做:

  1. 创建一个这样的处理程序:
 private static class SearchHandler extends Handler { private WeakReference 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是给你的列表的数据

这是从谷歌地址搜索中选择地点的存储库。 它具有全屏搜索列表的实现。

自定义Searchview

定制的searchview

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