android搜索:自定义建议布局

android搜索:自定义建议布局,android,android-layout,search,search-suggestion,Android,Android Layout,Search,Search Suggestion,我一直在遵循SearchView和dialog实现的指导。两者都在下面可见。有很多问题是关于如何定制搜索框的,但是很少有关于定制建议的UI的。(这些是关于颜色/字体的,默认值对我来说很好。)我希望能够扩大建议,以占据整个屏幕的宽度。是否有任何方法可以使用dialog或SearchView实现自定义宽度。我宁愿不使用图书馆,除非那是唯一的选择。如果这是可能的,或者使用其中一个实现更容易,那么就可以了 下面是对话框实现对我来说的样子: 以下是SearchView实现对我的影响: 是从google

我一直在遵循SearchView和dialog实现的指导。两者都在下面可见。有很多问题是关于如何定制搜索框的,但是很少有关于定制建议的UI的。(这些是关于颜色/字体的,默认值对我来说很好。)我希望能够扩大建议,以占据整个屏幕的宽度。是否有任何方法可以使用dialog或SearchView实现自定义宽度。我宁愿不使用图书馆,除非那是唯一的选择。如果这是可能的,或者使用其中一个实现更容易,那么就可以了

下面是对话框实现对我来说的样子:

以下是SearchView实现对我的影响:

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

自定义搜索视图

这是您可以做到的:

第一步 只需使用
RecyclerView
或可扩展列表或您想要使用的列表创建一个布局

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

  • 创建如下处理程序:

  • 此处
    suggestList
    是提供给您的列表的数据。您应该为搜索结果创建一个活动,并编写一个布局xml文件,其中listview或recyclerview填充宽度使用match_父值。
    内容必须是适配器中的搜索结果

    。。这可能help@lf215你可以自定义istview。。。。
    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());
            }
        }
    }
    
    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) {
            }
        });
    }