android搜索:自定义建议布局

时间:2016-01-15 01:10:11

标签: android android-layout search search-suggestion

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

这是对话框实现对我来说的样子: enter image description here

以下是SearchView实现对我来说的样子: enter image description here

3 个答案:

答案 0 :(得分:4)

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

自定义搜索结果

customized searchview

答案 1 :(得分:3)

这是你如何做到的: Screenshot of result

第1步

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

第2步

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

  1. 创建一个这样的处理程序:
  2. 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. TextChangeListener上添加searchEditText
    2. 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是您的

      列表中的数据

答案 2 :(得分:0)

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