Я создал панель инструментов с пиктограммой поиска, которая запускает поисковое окно на cli c. Тем не менее, я попытался добавить setOnQueryTextFocusChangeListener
, когда пользователь нажимает кнопку «Назад» на своем телефоне, чтобы закрыть окно поиска, но слева отображается значок, а значок на задней панели панели инструментов всегда присутствует.
![enter image description here](https://i.stack.imgur.com/lb16b.jpg)
Это код xml моей панели инструментов:
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@+id/topAppBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_menu"
app:title="Notes" />
</com.google.android.material.appbar.AppBarLayout>
с меню:
<?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/search"
android:icon="@drawable/ic_search"
android:title="Search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
</menu>
и моя деятельность:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
topAppBar = findViewById(R.id.topAppBar);
setSupportActionBar(topAppBar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.top_app_bar, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final SearchView searchView = (SearchView) item.getActionView();
if (item.getItemId() == R.id.search) {
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
searchView.setIconified(true);
}
}
});
}
return super.onOptionsItemSelected(item);
}
PS: У меня много проблем с этим поиском, есть ли у вас лучший способ добавить механизм поиска на панель инструментов?