android 搜索:自定义建议布局
android search: customize suggestion layout
我一直在遵循 SearchView 和对话框实现的说明 here。两者都在下面可见。 SO 上有很多问题都集中在自定义搜索框上,但很少有关于自定义 UI 的建议。 (那些做的大约 color/font,默认值对我来说很好。)我希望能够扩大建议以占据整个屏幕宽度。有什么方法可以使用对话框或 SearchView 实现来自定义宽度。我宁愿不使用图书馆,除非那是唯一的选择。如果使用其中一种实现方式可能或更容易做到这一点,那很好。
以下是我的对话框实现方式:
以下是我的 SearchView 实现:
Here
是从 google 地址搜索中选择位置的存储库。它具有全屏搜索列表的实现。
自定义搜索视图
您可以这样做:
第 1 步
只需使用 RecyclerView
或可扩展列表或您想使用的列表创建布局。
第 2 步
在你activity (CityActivity
)你需要这样做:
- 像这样创建处理程序:
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());
}
}
}
- 在你的
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 值。
内容必须是适配器中的搜索结果。
我一直在遵循 SearchView 和对话框实现的说明 here。两者都在下面可见。 SO 上有很多问题都集中在自定义搜索框上,但很少有关于自定义 UI 的建议。 (那些做的大约 color/font,默认值对我来说很好。)我希望能够扩大建议以占据整个屏幕宽度。有什么方法可以使用对话框或 SearchView 实现来自定义宽度。我宁愿不使用图书馆,除非那是唯一的选择。如果使用其中一种实现方式可能或更容易做到这一点,那很好。
以下是我的对话框实现方式:
以下是我的 SearchView 实现:
Here 是从 google 地址搜索中选择位置的存储库。它具有全屏搜索列表的实现。
自定义搜索视图
您可以这样做:
第 1 步
只需使用 RecyclerView
或可扩展列表或您想使用的列表创建布局。
第 2 步
在你activity (CityActivity
)你需要这样做:
- 像这样创建处理程序:
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());
}
}
}
- 在你的
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 值。 内容必须是适配器中的搜索结果。