gpt4 book ai didi

java - Android 搜索 View 在工具栏上表现不正常

转载 作者:行者123 更新时间:2023-12-02 09:39:08 25 4
gpt4 key购买 nike

这里有一段视频,展示了我的应用程序的实际行为: https://www.youtube.com/watch?v=81XIdEo0lks&feature=youtu.be你看,当我单击搜索图标时,它只是将其移动到左侧,然后我需要再次单击它,然后我需要单击 x 按钮 2 次才能真正退出搜索 View ,一团糟。这是我希望我的搜索 View 的行为方式: https://www.youtube.com/watch?v=sJ-Z9G0SDhc&t

MainActivity.java(仅相关部分)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);

MenuItem searchItem = menu.findItem(R.id.app_bar_search);

SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);

SearchView searchView = null;
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
}

return super.onCreateOptionsMenu(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/app_bar_search"
android:icon="@drawable/ic_search_black_24dp"
android:title="Search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.widget.SearchView" />
<item
android:id="@+id/logout_btn"
android:title="Log Out" />
</menu>

我希望我的搜索 View 的行为类似于该视频中的搜索 View ,单击搜索,出现键盘,您可以输入,也可以退出。我还想让这个 3 个垂直点图标在进入搜索 View 时消失。

最佳答案

首先声明一个状态变量来确定何时需要隐藏菜单项

boolean isHideMenuState = false;

然后引用需要隐藏在 onCreateOptionsMenu block 内的项目

MenuItem logoutItem = menu.findItem(R.id.logout_btn);
//... initialize other menu items here

//use hidden state to define when to hide item(s)
if(isHideMenuState){
logoutItem.setVisible(false);
//by now the ellipses(...) should go off
//if not try using setShowAsAction passing (SHOW_AS_ACTION_NEVER)
}
else{
logoutItem.setVisible(true);
}

下一步:向您的 searchView 添加焦点更改监听器

searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { 
@Override
public void onFocusChange(View v, boolean hasFocus) {
// Toggle isHideMenuState when search widget has focus/no focus
isHideMenuState = hasFocus
//Tell menu to re-create itself
invalidateOptionsMenu(); // onCreateOptionsMenu(...) is called again
}
});

最后,对于 UI,尝试更改 searchView 项的 actionViewClass

 app:actionViewClass="android.support.v7.widget.SearchView"

关于java - Android 搜索 View 在工具栏上表现不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57241175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com