我正在使用单个活动来显示SearchView以及显示搜索结果.搜索结果只是项目的子集,因此搜索充当过滤器.一切似乎都运行正常,但是当我点击SearchView的后退按钮时,我无法弄清楚如何恢复视图中的所有项目.
或者可能有另一种方法可以检测用户何时从搜索结果导航到上一个视图(在我的情况下,是同一个视图).
谢谢
我试图使用SearchViewCompat与ActionBarSherlock在API 8应用.
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item = menu.add("Search")
.setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search)
.setActionView(R.layout.collapsible_edittext);
item.setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS |
MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
// To use SearchViewCompat, I need to add it to the Menu item as well:
View searchView = SearchViewCompat.newSearchView(this);
// ...
SearchViewCompat.setOnQueryTextListener(...);
// ...
item.setActionView(searchView);
Run Code Online (Sandbox Code Playgroud)
请注意,顶部和底部代码都需要调用setActionView().这是否意味着无法进行搜索?
当用户没有输入任何内容时,我想在SearchView中显示一些默认建议.我正在使用矩阵光标手动设置我的自定义建议适配器.我尝试在onFocusChange和onClickListner中设置适配器,但建议隐藏在键盘后面,显然建议比键盘更早加载.我没有找到任何监听器告诉我searchview在视图中完全加载了键盘.帮助我找到正确的解决方案或任何解决方法.我已经尝试了一个解决方法postDelayed但它不是顺畅的经验.
我在onCreateOptionsMenu中有这个代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.clear();
final MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.searchview_in_menu, menu);
this.menu=menu;
basketProductCount = ShoppinglistDataSource.get(getContext()).getProductCountToOrder();
if(basketProductCount>0 && menu!=null){
this.activateBasket();
}
SearchManager manager = (SearchManager) getSystemService(SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) searchMenuItem.getActionView();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
int searchButtonId = mSearchView.getContext().getResources().getIdentifier("android:id/search_button", null, null);
ImageView searchButton = (ImageView) mSearchView.findViewById(searchButtonId);
if(searchButton!=null)
searchButton.setImageResource(R.drawable.search);
mSearchView.setSearchableInfo(manager.getSearchableInfo(new ComponentName(getApplicationContext(), SearchProductActivity.class)));
mSearchView.setIconifiedByDefault(true);
mSearchView.setIconified(true);
mSearchView.setQueryHint("Search from 4000+ products");
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.d("SEARCH_VIEW_DEBUG","Inside onQueryTextSubmit for query: "+s);
mSearchView.clearFocus();
mSearchView.setIconified(true); …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行搜索,以便突出显示所有"可见"搜索字母.我尝试使用spannable但是没有做到这一点,也许我没有做到这一点?基于此:突出显示ListView项目中的搜索文本 如何突出显示可见文本?这是我的过滤器:
private LayoutInflater mInflater;
private ValueFilter valueFilter;
public MySimpleArrayAdapter(Activity context) {
this.context = context;
mInflater = LayoutInflater.from(context);
}
private class ValueFilter extends Filter {
//Invoked in a worker thread to filter the data according to the constraint.
@Override
protected synchronized FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<Integer> filterList = new ArrayList<>();
int iCnt = listItemsHolder.Names.size();
for (int i = 0; i < iCnt; i++) {
if(listItemsHolder.Types.get(i).toString().indexOf("HEADER_")>-1){ …Run Code Online (Sandbox Code Playgroud) android textview android-layout android-fragments android-search
我想让我的应用程序包含一个单一的活动.此活动应该能够创建搜索并接收搜索.不幸的是,当我点击操作栏中的搜索按钮时,我的SearchView中会出现一个"双"搜索栏.我的意思是有一个搜索栏(dark-- SearchView)在操作栏中显示一秒钟,然后在操作栏上显示第二个(白色).有帮助吗?我究竟做错了什么?对不起,这个搜索的东西都是新的,让我感到困惑.
MainActivity(唯一的活动):
public class MainActivity extends ActionBarActivity {
Menu mMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getSupportActionBar().setDisplayShowTitleEnabled(false);
setContentView(R.layout.activity_main);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
}
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
if …Run Code Online (Sandbox Code Playgroud) 我已经开发了一个在操作栏中有搜索视图的应用程序,当我完全搜索其过滤器时我遇到问题但是当我按下按钮时它仍然显示过滤器数据所以我的问题是什么是Action Bar Search的后退按钮事件视图.?

我的搜索视图代码是
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(Menus.SEARCH));
searchView.setQueryHint(this.getString(R.string.search));
editSearch = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
editSearch.setHintTextColor(getResources().getColor(R.color.white));
searchView.setOnQueryTextListener(OnQuerySearchView);
private OnQueryTextListener OnQuerySearchView = new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String newText) {
if (TextUtils.isEmpty(newText)) {
listAllContact.clearTextFilter();
} else {
listAllContact.setFilterText(newText.toString());
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
String text = editSearch.getText().toString()
.toLowerCase(Locale.getDefault());
adapter.filter(text);
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
适配器中的过滤方法
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
propertyList.clear();
if (charText.length() == 0) {
propertyList.addAll(arrayList);
notifyDataSetChanged();
} else {
for (ContactProperty p …Run Code Online (Sandbox Code Playgroud) 我找到了这篇文章:一种在您的应用中搜索内容的新方法,我对这个机会感到非常兴奋.我想在谷歌搜索结果中显示我的应用程序内容,如下所示:
但是,本文没有关于如何在您的应用中实现此功能的任何信息.
我在我的应用程序中使用App Indexing API,如文章中所述:
这是我的代码:
...
private GoogleApiClient mClient;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_main);
mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
public Action getAction() {
Thing object = new Thing.Builder()
.setName("Test Content")
.setDescription("Test Description")
.setUrl(Uri.parse("myapp://com.example/"))
.build();
return new Action.Builder(Action.TYPE_VIEW).setObject(object)
.setActionStatus(Action.STATUS_TYPE_COMPLETED)
.build();
}
@Override
public void onStart() {
super.onStart();
mClient.connect();
AppIndex.AppIndexApi.start(mClient, getAction());
}
@Override
public void onStop() {
AppIndex.AppIndexApi.end(mClient, getAction());
mClient.disconnect();
super.onStop();
}
...
Run Code Online (Sandbox Code Playgroud)
这是结果:
谷歌显示我的应用程序的测试内容,但没有描述和预览图像.有没有办法在Google搜索结果中添加说明和预览图片?(如Youtube或Twitter)
我正在尝试将搜索建议更改为"轻量级主题".我正在使用appcompat-v7:22.2.0库并阅读有关自定义搜索视图小部件(android.support.v7.widget.SearchView)的新功能.
第一部分
工具栏
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
Run Code Online (Sandbox Code Playgroud)
主旋律
<style name="Main.Theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/red</item>
<item name="colorPrimaryDark">@color/red_dark</item>
<item name="searchViewStyle">@style/Main.Theme.SearchView</item>
</style>
Run Code Online (Sandbox Code Playgroud)
SearchView主题
<style name="Main.Theme.SearchView" parent="Widget.AppCompat.Light.SearchView">
<item name="voiceIcon">@mipmap/test_icon</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这样我就无法影响搜索视图.为了测试它,我正在更改搜索视图中的语音图标,并且它不会从默认值更改.
第二部分
第二个尝试是覆盖工具栏中的叠加主题:
叠加主题
<style name="Main.Theme.Overlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="searchViewStyle">@style/Main.Theme.SearchView</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这样我得到一些反馈,但我失去了"材料设计",特别是我的"旧"提示图标,并且它有下划线.我的最终目标是更改搜索建议行背景:
建议行布局
<item name="suggestionRowLayout">@layout/my_custom_layout</item>
Run Code Online (Sandbox Code Playgroud)
我认为我很难实现这个目标......你能帮助我吗?
android android-layout android-theme android-support-library android-search
每当我在搜索视图中输入时,关闭按钮(X)似乎由于某种原因而被禁用,而不是以白色显示.如何解决此错误以使其显示为白色?
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_search_list, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
searchView.setQueryHint(getResources().getString(R.string.station_search_hint));
}
Run Code Online (Sandbox Code Playgroud)
menu_search_list.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search_light"
android:title="@string/action_search"
android:orderInCategory="100"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
Run Code Online (Sandbox Code Playgroud)