在我的应用程序中,我正在创建一个搜索界面,SearchView当它失去并分别获得焦点时折叠和扩展.然而,失败的焦点只发生在两种情况:
按下后退按钮时.
SearchView按下旁边的主页图标时.
如果用户不仅点击这两件事,而且点击屏幕上的任何其他东西(例如,任何按钮或屏幕的任何空白部分而没有视图),我希望它失去焦点(并因此崩溃).
按Enter键时搜索活动未启动.搜索视图在操作栏上显示得很好.但是当我输入搜索查询并按Enter键时
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.punit.rateit"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name="com.punit.rateit.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:theme="@style/Theme.AppCompat.Light"
android:name=".SearchPageActivity">
<meta-data android:name="android.app.default_searchable" android:value=".SearchResultsActivity" />
<intent-filter>
<action android:name="android.intent.action.SearchPage" />
</intent-filter>
</activity>
<activity android:name="com.punit.rateit.SearchResultsActivity" android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
这是Menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:com.punit.rateit="http://schemas.android.com/apk/res-auto" >
<!-- Search, should appear as action button -->
<item android:id="@+id/search"
android:icon="@drawable/ic_search" …Run Code Online (Sandbox Code Playgroud) 我在我的操作栏中有一个搜索视图,我希望在方向更改后恢复查询.我怎样才能做到这一点?使用捆绑包设置查询SearchView.setQuery(query, false);不起作用,因为searchview ""会在扩展后立即将其查询设置为.
下面是我的相关代码onActivityCreated:
if(savedInstanceState != null && savedInstanceState.containsKey(BUNDLE_KEY_SEARCH))
mCurFilter = savedInstanceState.getString(BUNDLE_KEY_SEARCH);
Run Code Online (Sandbox Code Playgroud)
在这里我的onSaveInstanceState:
savedInstanceState.putString(BUNDLE_KEY_SEARCH, mCurFilter);
super.onSaveInstanceState(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)
那么我怎么能恢复它的状态,因为我无法使用它setQuery?谢谢大家
我很擅长使用SearchView.我需要一个功能,我有一个ActionBar我有的功能Search.当我点击"搜索"时,建议应显示在"搜索"字段下方的列表中.
到目前为止我做了什么:
在menu.xml中添加了搜索,并onCreateOptionsMenu()在我初始化SearchView的地方编写了代码并setSuggestionsAdapter实现了setOnQueryTextListener.
结果:我进入应用程序,点击搜索图标,显示建议.我输入一个字母,对匹配的字母进行排序.我键入第二个字母,它没有显示建议.此外,我关闭搜索视图并再次打开它,键盘打开,但列表中的建议未显示.
我需要的:根据用户输入的字符进行过滤.即使它不止一个角色.始终显示建议,默认为一个包含所有列表项,或者是在用户类型时排序的建议.
我在Android的SearchView类中看到,他们将文本设置为空并且也忽略了建议.但我不想要这个.
我被困在这里,不知道如何继续.请帮我.这是我的适配器代码:
public class ExampleAdapter extends CursorAdapter implements Filterable {
private ArrayList<String> items;
private ArrayList<String> orig;
public ExampleAdapter(Context context, Cursor cursor,
ArrayList<String> items) {
super(context, cursor, false);
this.items = new ArrayList<String>();
this.items = items;
orig = new ArrayList<String>();
orig.addAll(items);
}
@Override
public int getCount() {
return items.size();
}
@Override
public Filter getFilter() {
return new Filter() { …Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题(至少对我而言).我的应用程序适用于调试apk.但是当我创建发布apk时,它会在searchwidget中显示错误.我正在使用支持库'com.android.support:appcompat-v7:21.0.3'
这是我的代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.searchmenu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final MenuItem searchItem = menu.findItem(R.id.searchwidget);
final SearchView searchView = (SearchView) MenuItemCompat
.getActionView(searchItem);
if(null!=searchManager ) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}
searchView.setIconifiedByDefault(false);
SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// this is your adapter that will be filtered
Programs.this.adapter.getFilter().filter(newText);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
// this is your adapter that will …Run Code Online (Sandbox Code Playgroud) 我们刚刚将本地Android SDK更新到新版本22,我们也尝试更新我们的应用程序,但似乎是Android Studio布局设计视图中的SearchView渲染问题:每次设计师尝试渲染SearchView元素,它引发了一个异常:
Android.widget.SearchView的android.content.res.TypedArray.hasValueOrEmpty(TypedArray.java:845)中的java.lang.NullPointerException(SearchView.java:295).(SearchView.java:258)在android.widget.SearchView.(SearchView.java:254)java.lang.reflect.Constructor.newInstance(Constructor.java:422)在android.view.LayoutInflater.createView(LayoutInflater.java:607)的android.view .LayoutInflater.onCreateView(LayoutInflater.java:682)位于android.view.LayoutInflater中的android.view.LayoutInflater.RinoutInflater中的android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:806)中的android.view.LayoutInflater.DeCot LayoutInflater_Delegate.java:64)android.view.LayoutInflater.inflate(LayoutInflater.java:782),android.view.LayoutInflater.inflate(LayoutInflater.java:504),android.view.LayoutInflater.inflate(LayoutInflater.java:385) )
即使我们在新布局文件中从左侧工具栏创建新元素,也会出现这种情况.任何的想法?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SearchView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/searchView" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 当前情景
我的应用主页包含导航抽屉,因此我将视图加载为片段.我在工具栏中也有搜索图标.我在menu.xml中实现了它.下一步我SearchView通过以下问题的答案实现搜索图标
在工具栏中实现搜索.
这在搜索视图显示时工作正常,也可以被解雇.
问题
我可以为搜索视图实现搜索查询,但我无法理解如何继续.问题是,onCreateOptionsMenu在Activity和搜索视图中的所有代码都在Activity.我不明白的是必须搜索的数据Fragment是在Activity课堂上加载的.我将点击另一个Web服务来获取搜索结果,但我将如何Fragment再次对搜索到的数据进行通信.我无法理解如何在这种情况下继续前进.
几天前我注意到我输入的文字SearchView没有显示出来.也许这个问题在很久以前开始了,我没有注意到它,但我知道当我第一次设置搜索功能时,一切都运行良好.
这是一个截图(我已经输入了文本,你可以看到它没有显示):
我已经尝试SearchView用这个SO问题改变文本的颜色,并且我也尝试在我的可搜索配置XML文件中更改文本颜色.在我发现这些都不起作用后,我撤消了我的更改,以便您可以看到我目前在下面的代码:
MainActivity.java
@Override
public boolean onCreateOptionsMenu(Menu) {
...
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchResultsActivity.class)));
// Note: getSearchableInfo(getComponentName()) will not work on all flavours
// because of a difference in app IDs
}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是new ComponentName(...)代替,getSearchableInfo(getComponentName())因为我在不同的口味中使用不同的包名称.
上面的活动SearchView是显示的位置.结果显示在另一项活动中.
searchable.xml
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
...
<activity
android:name=".ui.MainActivity"
android:label="@string/title_activity_main"
android:theme="@style/AppTheme">
<meta-data …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的Android应用程序中实现SearchView,但在扩展它时会有额外的填充.
SearchView集成在菜单中,当应用程序启动时,我在工具栏中有一个搜索图标.当我单击该搜索按钮时,SearchView会扩展,但有一个额外的填充.
以下是一些照片,以便您了解问题:
我找到了一个解决方案,在SearchView中添加一个负左边填充(-16dp): searchView.setPadding(getResources().getDimensionPixelSize(R.dimen.search_view_minus), 0, 0, 0);
不幸的是,如果我使用此解决方案,工具栏右侧的搜索图标将受到影响(不知何故,SearchView会越过搜索图标).
这是我的菜单:
<?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"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_48dp"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Cauta..."/>
</menu>
Run Code Online (Sandbox Code Playgroud)
这是我的工具栏布局:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_home"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:theme="@style/AppTheme.Title"
app:titleMarginStart="0dp"
app:navigationIcon="@drawable/ic_menu_white_24dp"
app:contentInsetStartWithNavigation="0dp"
app:contentInsetEndWithActions="0dp"
app:contentInsetStart="0dp"
app:contentInsetEnd="0dp" />
Run Code Online (Sandbox Code Playgroud)
这是应用于SearchView的一些自定义样式:
<style name="searchStyle" parent="Widget.AppCompat.SearchView.ActionBar">
<item name="queryHint">@string/search_hint</item>
<item name="searchIcon">@drawable/ic_search_white_24dp</item>
<item name="voiceIcon">@drawable/ic_keyboard_voice_white_24dp</item>
<item name="android:textColorHint">@android:color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我的问题有适当的解决方案吗?
我在Android上对我的应用程序进行了一些检测测试,但是碰壁了.我有一个来自android的v7支持库的SearchView,我想以某种方式测试它.我猜它不能直接点击,因为我用传统的方法尝试过:
onView(withId(R.id.search_view)).perform(click())
Run Code Online (Sandbox Code Playgroud)
有没有办法SearchView用Espresso 进行测试?