我刚刚实现了v7 AppCompat支持库,但在MenuItemCompat.getActionView我测试的每个Android版本中总是返回null(4.2.2,2.3.4 ....)
该SearchView显示在操作栏上,但它不响应触摸操作,不会展开,以显示其EditText与就像一个简单的图标.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
if (searchView != null) {
SearchViewCompat.setOnQueryTextListener(searchView, mOnQueryTextListener);
searchView.setIconifiedByDefault(false);
Log.d(TAG,"SearchView not null");
} else
Log.d(TAG, "SearchView is null");
}
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
menu.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"
app:showAsAction="always|collapseActionView"
android:icon="@drawable/abc_ic_search"
android:title="@string/action_bar_search"
android:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:id="@+id/action_refresh"
android:icon="@drawable/refresh"
android:title="@string/action_bar_refresh"
app:showAsAction="ifRoom"/>
</menu>
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用工具栏搜索小部件.一切正常,但期待我完全坚持删除工具栏中搜索字段下方的下划线.我尝试过很多解决方案但没有任何效果.以下是我尝试过的一些解决方案.
要求是删除图像中的白色下划线

Ist解决方案:
//Removing underline
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
View searchPlate = searchView.findViewById(searchPlateId);
if (searchPlate!=null) {
searchPlate.setBackgroundColor (Color.TRANSPARENT);
int searchTextId = searchPlate.getContext ().getResources ().getIdentifier ("android:id/search_src_text", null, null);
}
Run Code Online (Sandbox Code Playgroud)
第二解决方案:
EditText searchEdit = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));
searchEdit.setBackgroundColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)
上面的代码用于更改EditText的背景,但仍然下划线显示在SearchBar中的关闭图标下方.
我用于SearchBar小部件的完整代码如下:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater infl) {
super.onCreateOptionsMenu(menu, infl);
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.action_search, menu);
final SearchView searchView = (SearchView) MenuItemCompat
.getActionView(menu.findItem(R.id.search));
SearchManager searchManager = (SearchManager) getActivity ().getSystemService (getActivity ().SEARCH_SERVICE);
searchView.setSearchableInfo (searchManager.getSearchableInfo (getActivity ().getComponentName ()));
//changing edittext color
EditText searchEdit = …Run Code Online (Sandbox Code Playgroud) 我试图在我的Android应用程序中实现类似于最新的gmail应用程序(操作栏中的搜索图标)的搜索功能.

点击"搜索"图标后,操作栏将变为搜索字段,左侧带有后退按钮,右侧带有麦克风按钮.我想在我的应用程序中使用相同的组件.
这有什么图书馆或教程吗?
这是否有可能在非棒棒糖版本中支持这种类型的材料设计搜索.?
android uisearchbar android-layout android-search material-design
我有一个应用程序,它有两个扩展的搜索建议提供程序,SearchRecentSuggestionsProvider我已使用以下Intent过滤器和元数据在清单文件中正确设置:
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable_tv" />
Run Code Online (Sandbox Code Playgroud)
可靠的资源包括android:includeInGlobalSearch="true",所以应该没问题.
我显然也有一个提供者:
<provider
android:name="com.miz.contentprovider.TvShowContentProvider"
android:authorities="com.miz.contentprovider.TvShowContentProvider"
android:exported="true" />
Run Code Online (Sandbox Code Playgroud)
这一切在Android 4.3中使用Google搜索应用程序都运行良好,但我刚刚将所有设备更新到Android 4.4,我无法再在我的应用程序中搜索内容.在操作系统更新之前工作的其他应用程序也是如此,即Google Play音乐.
我在XDA开发人员身上发现了一个线程,如果有帮助的话,也会提到这个:http://forum.xda-developers.com/showthread.php?p = 474272102
有谁知道发生了什么或如何解决?
更新:我可以确认它只发生在安装了Android 4.4的设备上.我使用最新的Google搜索更新在Android 4.3设备上进行了测试,并且按预期工作.看起来这是Google更新中的一个错误.
我在操作栏中设置搜索视图时遇到问题.
我跟着开发者网站,但它不起作用.我觉得我错过了什么.
当我运行我的代码时,它总是输出"无法获取可搜索的信息"(MainActivity.setupSearchView()).
MainActivity.java
// package...
// imports...
public class MainActivity extends Activity {
private static String tag = "Main Activity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.search_view, menu);
setupSearchView(menu);
return true;
}
private void setupSearchView(Menu menu) {
SearchManager sm = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchableInfo si = sm.getSearchableInfo(getComponentName());
if (si == null) {
Log.wtf(tag, "failed to get searchable info");
return;
}
SearchView sv = (SearchView) menu.findItem(R.id.menu_search).getActionView();
sv.setSearchableInfo(si);
// …Run Code Online (Sandbox Code Playgroud) 我想在用户按下按钮时启动Google即时语音搜索.但是,我找不到意图在文档中开始搜索.
有人知道如何开始Google Now语音搜索的活动吗?
我的操作栏上有问题,我尝试在其上设置搜索视图,以便使搜索栏可扩展.
这很好,除了我必须使用选项设置所有其他菜单项,ifRoom以便在单击搜索图标时让搜索字段占据所有空间.
这部分也运行良好,除了太多的菜单项被推入菜单溢出,垂直屏幕上只剩下2个图标(包括搜索栏).
我对另一个有5个菜单项的活动做了另一个测试:
android:showAsAction="always"结果如下:
情况1:

案例2:

为什么我使用ifRoom,只显示2个图标,而实际上5个可以轻松填满这个地方?
因此,我的搜索视图项旁边只有一个菜单项...
谢谢!
我的应用程序中有一个SearchView小部件,我想问一些关于使它自定义的问题.首先,您只能通过点击搜索图标开始搜索,有没有办法让整个SearchView可点击?此外,还有一种方法可以在单击时使SearchView显示为这样吗?
一只忙碌的猫http://i41.tinypic.com/rr2ow4.png ![] [1]
它现在处于这种状态:
一只忙碌的猫http://i41.tinypic.com/11jlu2p.png ![] [1]
这是我的代码:
citySearch = (SearchView) findViewById(R.id.city_search_bar);
citySearch.setBackgroundResource(R.drawable.search_background);
citySearch.setOnSearchClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
citySearch.setIconifiedByDefault(true);
//citySearch.setIconified(true);
}
});
citySearch.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String text) {
((Filterable) cityListView.getAdapter()).getFilter().filter(text);
return false;
}
@Override
public boolean onQueryTextSubmit(String text) {
return false;
}
});
try
{
Field searchField = SearchView.class.getDeclaredField("mSearchButton");
searchField.setAccessible(true);
ImageView searchBtn = (ImageView)searchField.get(citySearch);
searchBtn.setImageResource(R.drawable.search_icon);
searchBtn.setScaleType(ScaleType.FIT_CENTER);
searchPlate.setBackgroundResource(R.drawable.search_background);
}
catch (NoSuchFieldException e)
{
Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
catch (IllegalAccessException e)
{
Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
Run Code Online (Sandbox Code Playgroud) 我有一个我想搜索的活动.当我点击搜索时,OnNewIntent它会被调用两次......我做错了什么?
我正在创建像这样的Searchview
public override bool OnCreateOptionsMenu(IMenu menu)
{
searchView = new SearchView(this);
var searchManager = (SearchManager)GetSystemService(Context.SearchService);
var searchableInfo = searchManager.GetSearchableInfo(ComponentName);
searchView.SetSearchableInfo(searchableInfo);
var search_item = menu.Add(new Java.Lang.String("Search"));
search_item.SetActionView(searchView);
search_item.SetShowAsAction(ShowAsAction.IfRoom);
var edit = menu.Add(0, insertItemID, 0, "Insert");
edit.SetShowAsAction(ShowAsAction.IfRoom);
edit.SetIcon(Android.Resource.Drawable.IcMenuAdd);
return base.OnCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
日志:
10-17 07:45:45.491 I/ActivityManager( 900): START {act=android.intent.action.SEARCH flg=0x10000000 cmp=Intranet.Intranet/intranet.screens.ContactListActivity (has extras)} from pid 2971
10-17 07:45:47.562 W/EGL_emulation( 2971): eglSurfaceAttrib not implemented
10-17 07:45:47.562 I/ActivityManager( 900): START {act=android.intent.action.SEARCH flg=0x10000000 cmp=Intranet.Intranet/intranet.screens.ContactListActivity (has extras)} from pid 2971
10-17 07:45:48.472 D/OpenGLRenderer( 2971): …Run Code Online (Sandbox Code Playgroud) 我已经实现了动作栏SearchView,它工作正常,但在屏幕的底部显示了一个浮动文本弹出窗口.看截图:
ListView Java类:
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
mListView.clearTextFilter();
} else {
// EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
// ca.getFilter().filter(newText.toString());
// Filter lFilter = mDataAdapter.getFilter();
// lFilter.filter("");
// following line was causing the ugly popup window.
mListView.setFilterText(newText.toString());
// EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
// ca.getFilter().filter(newText.toString());
}
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
Run Code Online (Sandbox Code Playgroud)
适配器类
@Override
public Filter getFilter() {
/**
* A filter object which will filter message key
* */
Filter filter …Run Code Online (Sandbox Code Playgroud)