将 SearchView 与自定义 searchSuggestAuthority 一起使用时系统提出不需要的建议
Unwanted suggestions from system when using SearchView with custom searchSuggestAuthority
我的应用程序的 ActionBar 中有一个 android.widget.SearchView。当我开始输入时,它会显示连接到 Room 数据库的 ContentProvider 的结果。这在模拟器上一切正常,但在我的真实设备上,当我触摸 SearchView 文本字段时,我会立即看到我的结果,然后弹出窗口被这个奇怪的弹出窗口所取代,显示两个 phone 数字(这是已知的数字我)。如果我开始输入,这个框就会消失,正确的结果会再次出现。
search with weird popup
我不知道是什么原因造成的。这是与 SearchView 相关的代码。
MainActivity.kt
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.bottom_nav_menu, menu)
var searchItem = menu.findItem(R.id.ItemSearchView);
var searchView : SearchView = searchItem.actionView as SearchView;
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
val searchableInfo = searchManager.getSearchableInfo(componentName)
searchView.setSearchableInfo(searchableInfo)
searchView.isIconifiedByDefault = false
searchView.maxWidth = 10000;
searchView.onFocusChangeListener = View.OnFocusChangeListener { view, b ->
Log.i(TAG, "SearchView focus is ${b}")
}
return super.onCreateOptionsMenu(menu)
}
searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/honey_where"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
android:searchSuggestAuthority=
"com.example.contentProviders.SearchSuggestionProvider"
android:searchSuggestIntentAction="android.intent.action.VIEW"
android:searchSuggestThreshold="0"
/>
bottom_nav_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_locationlist"
android:iconTint="@color/colorPrimary"
android:icon="@android:drawable/ic_menu_mapmode"
android:title="@string/title_locations" />
<item
android:id="@+id/ItemSearchView"
android:icon="@drawable/ic_icon"
android:iconTint="@color/colorAccent"
android:iconifiedByDefault="false"
android:queryHint="Search"
android:theme="@style/AppSearchView"
android:inputType="textAutoComplete"
app:actionLayout="@layout/searchview"
app:showAsAction="always"
android:title="" />
<item
android:id="@+id/navigation_settings"
android:icon="@android:drawable/ic_menu_manage"
android:title="@string/title_settings" />
</menu>
AndroidManifest.xml
<provider
android:name=".contentProviders.SearchSuggestionProvider"
android:authorities=
"com.example.contentProviders.SearchSuggestionProvider"
android:enabled="true"
android:exported="false"></provider>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
tools:ignore="LockedOrientationActivity">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
这是两个字符后 SearchView 正常工作的示例。触摸它会显示奇怪的弹出窗口,一个字符什么都不做,两个字符开始正常工作,这在模拟器中也能正常工作:
SearchView acting normal
我已经尝试了所有我能想到的方法,但我完全卡在了这个上。任何人都可以提供任何帮助,即使只是正确方向的提示,我们也将不胜感激。
长话短说;博士
我试图找出这个覆盖我的自定义搜索的弹出窗口的来源,知道这至少会帮助我寻找摆脱它的方法。如果有人知道如何摆脱它,那就太棒了。
更新:2020 年 5 月 29 日:
我已经尝试逐步查看 SearchView 源代码以查看发生了什么,但是 "swap" 似乎是在 SearchSuggestion 提供了建议之后发生的。有什么地方 "deeper" 可能会在这里激活吗?
附带说明一下,这是在 OnePlus 6T 上,以防他们添加了某种自定义代码。
我终于能够使用以下方法解决此问题:
searchView.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS
我的应用程序的 ActionBar 中有一个 android.widget.SearchView。当我开始输入时,它会显示连接到 Room 数据库的 ContentProvider 的结果。这在模拟器上一切正常,但在我的真实设备上,当我触摸 SearchView 文本字段时,我会立即看到我的结果,然后弹出窗口被这个奇怪的弹出窗口所取代,显示两个 phone 数字(这是已知的数字我)。如果我开始输入,这个框就会消失,正确的结果会再次出现。
search with weird popup
我不知道是什么原因造成的。这是与 SearchView 相关的代码。
MainActivity.kt
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.bottom_nav_menu, menu)
var searchItem = menu.findItem(R.id.ItemSearchView);
var searchView : SearchView = searchItem.actionView as SearchView;
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
val searchableInfo = searchManager.getSearchableInfo(componentName)
searchView.setSearchableInfo(searchableInfo)
searchView.isIconifiedByDefault = false
searchView.maxWidth = 10000;
searchView.onFocusChangeListener = View.OnFocusChangeListener { view, b ->
Log.i(TAG, "SearchView focus is ${b}")
}
return super.onCreateOptionsMenu(menu)
}
searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/honey_where"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
android:searchSuggestAuthority=
"com.example.contentProviders.SearchSuggestionProvider"
android:searchSuggestIntentAction="android.intent.action.VIEW"
android:searchSuggestThreshold="0"
/>
bottom_nav_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_locationlist"
android:iconTint="@color/colorPrimary"
android:icon="@android:drawable/ic_menu_mapmode"
android:title="@string/title_locations" />
<item
android:id="@+id/ItemSearchView"
android:icon="@drawable/ic_icon"
android:iconTint="@color/colorAccent"
android:iconifiedByDefault="false"
android:queryHint="Search"
android:theme="@style/AppSearchView"
android:inputType="textAutoComplete"
app:actionLayout="@layout/searchview"
app:showAsAction="always"
android:title="" />
<item
android:id="@+id/navigation_settings"
android:icon="@android:drawable/ic_menu_manage"
android:title="@string/title_settings" />
</menu>
AndroidManifest.xml
<provider
android:name=".contentProviders.SearchSuggestionProvider"
android:authorities=
"com.example.contentProviders.SearchSuggestionProvider"
android:enabled="true"
android:exported="false"></provider>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
tools:ignore="LockedOrientationActivity">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
这是两个字符后 SearchView 正常工作的示例。触摸它会显示奇怪的弹出窗口,一个字符什么都不做,两个字符开始正常工作,这在模拟器中也能正常工作: SearchView acting normal
我已经尝试了所有我能想到的方法,但我完全卡在了这个上。任何人都可以提供任何帮助,即使只是正确方向的提示,我们也将不胜感激。
长话短说;博士 我试图找出这个覆盖我的自定义搜索的弹出窗口的来源,知道这至少会帮助我寻找摆脱它的方法。如果有人知道如何摆脱它,那就太棒了。
更新:2020 年 5 月 29 日:
我已经尝试逐步查看 SearchView 源代码以查看发生了什么,但是 "swap" 似乎是在 SearchSuggestion 提供了建议之后发生的。有什么地方 "deeper" 可能会在这里激活吗?
附带说明一下,这是在 OnePlus 6T 上,以防他们添加了某种自定义代码。
我终于能够使用以下方法解决此问题:
searchView.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS