如何SearchView通过单击右侧的X按钮捕获用户单击明文的事件
我已经捕获了onQueryTextChange事件但是,这适用于任何文本更改而不是该X按钮
我在ActionBar中有一个searchView.我想在用户完成输入时关闭键盘.我在searchView上有以下queryTextListener
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// Do something
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
showProgress();
// Do stuff, make async call
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
基于类似的问题,以下代码应该关闭键盘,但在这种情况下它不起作用:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)
两者都不起作用.我不确定这是否是Honeycomb特定的问题,或者它是否与ActionBar中的searchView相关,或两者兼而有之.有没有人得到这个工作或知道为什么它不起作用?
我在我的项目中使用工具栏搜索小部件.一切正常,但期待我完全坚持删除工具栏中搜索字段下方的下划线.我尝试过很多解决方案但没有任何效果.以下是我尝试过的一些解决方案.
要求是删除图像中的白色下划线

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) 在我的活动中尝试将SearchView小部件添加到ActionBar时遇到了问题 - 在调用getActionView获取SearchView对象时,我得到一个空值.
我一直在关注Android开发者指南,并且还经历了大量的SO问题以及互联网上的其他一些链接; 一切都无济于事.它可能是一些简单的东西,但我无法弄明白 - 在我看来,我的代码基本上与谷歌相同(除了更改一些名称等),但它仍然无法正常工作.
任何帮助,将不胜感激.
下面包括代码的相关位.如果您不清楚是否有任何可能出错的问题,请告诉我.
活动代码:
private ListView workflowListView;
private DrawerLayout drawerLayout;
private ListView drawerList;
private ActionBarDrawerToggle drawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_workflow_list);
workflowListView = (ListView) findViewById(R.id.workflowListView);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerList = (ListView) findViewById(R.id.drawer_list);
drawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
drawerLayout, /* DrawerLayout object */
R.drawable.ic_launcher, /* nav drawer icon to replace 'Up' caret */
R.string.app_name, /* "open drawer" description */
R.string.app_name /* "close drawer" description */
) …Run Code Online (Sandbox Code Playgroud) ---解决了问题 - 在编辑文本中添加了答案---
我ActionBar在我的Android应用程序中使用了Sherlock.在那里,我想展示一个SearchView.它到目前为止工作正常,但我意识到,我在尝试自定义时做错了.
我这样创建它:
searchView.setQueryHint("Search: ");
searchView.setOnQueryTextListener(this);
searchView.setOnCloseListener(...);
searchMenuItem = menu.add("Search place");
searchMenuItem.setIcon(R.drawable.ic_action_search)
.setActionView(searchView)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
Run Code Online (Sandbox Code Playgroud)
我想做两件事:
更改显示在文本字段中的文本"搜索"的颜色.看起来我用我的主题中的整体文字样式改变了它,但我希望我能以某种方式设置单独的颜色.
打开此搜索视图时,它将显示在操作栏的左侧.但我需要在右侧.图标(放大镜)实际上位于条形图的右侧,但按下它会打开左侧的EditTextfield.我尝试使用LayoutParams但是在尝试使用LayoutParams将其添加到Action Bar时,我遗漏了一些必要的东西.

所以希望有人可以帮助我.
谢谢你,托比亚斯
----编辑----
好的,所以有一件事已经解决了.通过XML添加ActionBar使TextEdit向右.
getSupportMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
Log.e(TAG, "searchView: " + searchView);
Run Code Online (Sandbox Code Playgroud)
在我的menu.xml中
<item android:id="@+id/action_search"
android:title="Search"
android:icon="@drawable/ic_action_search"
android:showAsAction="always"
android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
所以至少有一个谜团解决了(为什么这会产生影响).但是新创建的XML在调用时不再关闭
searchMenuItem.collapseActionView();
Run Code Online (Sandbox Code Playgroud)
所以它仍然有问题.
---编辑2 ---
只是让你知道.我找到了文字颜色的解决方案.它可以通过使用SearchView的AutoCompleteTextView来实现:
AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(R.color.white));
searchText.setTextColor(getResources().getColor(R.color.white));
Run Code Online (Sandbox Code Playgroud)
所以我遇到的最后一个问题是SearchView在提交文本时不再关闭.所以collapseActionView()等不起作用.有任何想法吗?
---编辑3 ---
好的,我找到了解决方案.我不知道这是否是正确的方法,但在使用时
((SearchView) searchMenuItem.getActionView()).setIconified(true);
Run Code Online (Sandbox Code Playgroud)
它关闭了 EditText
我必须做两次,因为第一次只是"删除"我的输入文本并显示"提示",而第二次使用是"关闭"提示EditText并将searchView折叠到放大镜.笨拙的风格,但它的工作原理.:-)
我在Action Bar中使用了SearchView.我想在搜索视图上使用自动完成功能来从数据库中获取结果.
这可能吗?或者我是否需要使用自定义文本框然后添加自动完成功能?
当用户点击搜索图标时,我有一个可在我的OptionsMenu中扩展的SearchView.但是,它仅在其他OptionsMenu图标中的可用空间内扩展.在宽屏幕上这很好,但是在狭窄的空间内,只有在搜索框中显示5-10个字符的空间.我希望它覆盖其他图标,例如它适用于Android Contacts应用程序.目前,我正在建设targetSdkVersion = 17.希望我错过了一些简单的东西:)
(注意后来添加:到目前为止,我发现可行的唯一解决方案是在我想扩展搜索图标时隐藏所有菜单图标.这在概念上很简单.但它很混乱,因为在恢复隐藏的图标时,必须要去通过一堆逻辑来确定哪些要恢复,或保持状态变量等等)
这是OptionsMenu的项目xml:
<item
android:id="@+id/menu_search_shallow"
android:title="Search Current Folder"
android:icon="@drawable/ic_btn_search"
android:showAsAction="always|collapseActionView"
android:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
我的主要活动代码中也有:
@Override
public boolean onCreateOptionsMenu (Menu menu)
{
getMenuInflater().inflate(R.menu.nav_menu, menu);
this.optionsMenu = menu;
MenuItem searchItem = menu.findItem (R.id.menu_search_shallow);
searchItem.setOnActionExpandListener (this);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint (getString (R.string.search_shallow_hint));
searchItem = menu.findItem (R.id.menu_search_deep);
searchItem.setOnActionExpandListener (this);
searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint (getString (R.string.search_deep_hint));
}
Run Code Online (Sandbox Code Playgroud)
和
@Override
public boolean onMenuItemActionExpand(MenuItem item)
{
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener (this);
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item)
{ …Run Code Online (Sandbox Code Playgroud) 我的Action Bar中有一个搜索小部件,如下所示:

(1)如何更改"iPhone"文本的颜色?
(2)此外,如果您注意到灰色X - 整个搜索小部件也是该颜色,当它处于图标位置时.我在Holo.Theme.Light并使用我自己的mods.
如何在styles.xml文件中更改窗口小部件的这两种样式(假设您在哪里对搜索窗口小部件进行更改)?
我正在做一个应用程序,例如当我点击图像时(它是一个searchView)

搜索板打开!
它看起来像

但是这里会显示默认搜索图标(放大镜),但只要输入了一些文本,这个就会消失

但我不希望显示放大镜,即使是第一次点击图像
这里我没有使用任何xml文件
我的代码是
public class MainActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout relative = new RelativeLayout(this);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
relative.setLayoutParams(params);
setContentView(relative);
SearchView searchView = new SearchView(this);
traverseView(searchView, 0);
// searchView.setIconifiedByDefault(false);
LayoutParams searchViewparams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
// searchViewparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
searchView.setLayoutParams(searchViewparams);
relative.addView(searchView);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
private void traverseView(View view, int index) {
if (view instanceof SearchView) {
SearchView v = (SearchView) view;
for(int i = 0; i < v.getChildCount(); i++) { …Run Code Online (Sandbox Code Playgroud)