我在操作栏中有SearchView。当用户单击它然后键盘出现时,它会扩展。这是预期的行为。但是,在我的应用程序中,有一种情况是以编程方式扩展SearchView。
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
MenuItemCompat.expandActionView(searchMenuItem);
在这种情况下,我不想显示键盘。我以编程方式扩展SearchView只是为了向用户显示上次搜索查询的内容。
那么可以在不显示键盘的情况下打开搜索视图吗?
答案 0 :(得分:2)
我用这个解决了我的问题:
@Override
public void onPrepareOptionsMenu(Menu menu) {
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));
if(!TextUtils.isEmpty(mSearch)){
searchView.setQuery(mSearch, false);
searchView.setIconified(false);
searchView.clearFocus();
}
}
如果此代码可以解决您的问题,请告诉我。
答案 1 :(得分:1)
我使用下面的代码来扩展searchview而不打开键盘:
searchView.setFocusable(false);
searchView.setIconified(false);
searchView.clearFocus();
希望这有助于某人。
答案 2 :(得分:0)
我已经解决了这个问题。请覆盖以下代码的方法 -
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
MenuItem menuItem = menu.findItem(R.id.menu_search);
searchView = ((SearchView) menuItem.getActionView());
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
menuItem.setVisible(true);
}
答案 3 :(得分:0)
在我的应用中,我希望拥有一个满足以下要求的SearchView:
我设法获得了预期的结果。
activity_search.xml
<LinearLayout 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="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#ffffff"
android:elevation="8dp"
app:contentInsetStartWithNavigation="0dp">
<androidx.appcompat.widget.SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="false"
app:iconifiedByDefault="false"
app:queryBackground="@android:color/transparent"
app:queryHint="Search..." />
</androidx.appcompat.widget.Toolbar>
</LinearLayout>
SearchActivity.kt
class SearchActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_search)
setSupportActionBar(toolbar)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
search_view.setOnQueryTextListener(this)
}
override fun onQueryTextChange(newText: String?): Boolean {
// Perform search either here or in onQueryTextSubmit()
return true
}
override fun onQueryTextSubmit(query: String?): Boolean {
// Clear focus here to avoid situation where in order to exit the activity you have to click Back twice
// This happens if you click "Search" button on your keyboard and then want to exit the activity.
// First Back click clears SearchView focus while the second click exits the activity.
// You don't want to click twice, do you?
search_view.clearFocus()
return false
}
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
android.R.id.home -> { onBackPressed(); true }
else -> super.onOptionsItemSelected(item)
}
}