Как изменить фон панели действий при нажатии кнопки «Поиск»?

Я прошел учебник по интерфейсу поиска на сайте Android Developers и успешно реализован.

Единственное, чего я не смог достичь, это изменить фон Actionbar при нажатии меню поиска и вернуть его обратно при нажатии кнопки «Назад»?

Ниже приведен снимок экрана из приложения Gmail. Обычная панель действий выглядит так.

Введите описание изображения здесь

И когда вы нажимаете на меню «Поиск», оно меняется на одно, как показано ниже, без изменения активности.

Введите описание изображения здесь

Я хочу достичь этой функциональности. Пожалуйста помоги. Благодарю.

В основном FrameLayout создается в приложении Gmail, которое содержит два представления:

  • Toolbar – первая красная панель инструментов, доступная в открытом API
  • MaterialSearchActionView который содержит три вида
    • ImageView – со стрелкой назад
    • EditText
    • ImageView – с микрофоном "x" / "

Второе представление недоступно в публичном API.

Я думаю, что идея проста. Когда вы открываете свою Activity второе представление GONE и когда вы нажимаете значок поиска , отображается. Невозможно получить MaterialSearchActionView поэтому вам нужно создать свой собственный вид, содержащий эти элементы управления.

Я создаю небольшой пример, как это сделать:

DoubleActionBarActivity.class:

 public class DoubleActionBarActivity extends ActionBarActivity { Toolbar toolbar; Toolbar searchToolbar; boolean isSearch; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_with_double_toolbar); toolbar = (Toolbar) findViewById(R.id.toolbar); searchToolbar = (Toolbar) findViewById(R.id.toolbar_search); prepareActionBar(toolbar); } private void prepareActionBar(Toolbar toolbar) { setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); if (Build.VERSION.SDK_INT >= 21) { getWindow().setStatusBarColor(getResources().getColor(isSearch ? android.R.color.darker_gray : android.R.color.holo_red_dark)); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(isSearch ? R.menu.search_for_second_toolbar : R.menu.search_item_only, menu); if (isSearch) { final SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView(); search.setIconified(false); search.setQueryHint("search"); search.setOnCloseListener(new SearchView.OnCloseListener() { @Override public boolean onClose() { return true; } }); } return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id){ case R.id.action_search:{ isSearch = true; searchToolbar.setVisibility(View.VISIBLE); prepareActionBar(searchToolbar); supportInvalidateOptionsMenu(); return true; } case android.R.id.home: if(isSearch){ isSearch = false; prepareActionBar(toolbar); searchToolbar.setVisibility(View.GONE); supportInvalidateOptionsMenu(); } return true; default: return super.onOptionsItemSelected(item); } } } 

activity_with_double_toolbar.xml

 <?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"> <FrameLayout android:layout_width="match_parent" android:layout_height="@dimen/abc_action_bar_default_height_material"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:background="@android:color/holo_red_dark" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.Toolbar> <android.support.v7.widget.Toolbar android:visibility="gone" android:background="@android:color/darker_gray" android:gravity="center_vertical" android:id="@+id/toolbar_search" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.Toolbar> </FrameLayout> </LinearLayout> 

search_for_second_toolbar.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/action_search" app:showAsAction="ifRoom" app:actionViewClass="android.support.v7.widget.SearchView" android:title="Search"/> </menu> 

search_item_only.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/action_search" android:title="search" android:icon="@drawable/abc_ic_search_api_mtrl_alpha" app:showAsAction="ifRoom" ></item> </menu> 

Кроме того, вы можете посмотреть эту библиотеку

https://github.com/Quinny898/PersistentSearch

Это может быть интересно для вас.

Intereting Posts