【android】ActionBarでのSearchViewの基本的な使い方
はじめに
今回やりたかったことは、ActionBarに検索バーをおいて検索すると検索用の画面へ遷移するということ。
最終的にやりたいことは検索バーで検索結果画面を開くところだけど、今回は検索バーをおいてイベントをハンドリングするところまで。
検索バーをおく
まずは画面遷移とかは考えずにとりあえず検索バーをおくだけ。
res/menu/main.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/search_menu_search_view" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always" /> </menu>
MainActivity.java
public class MainActivity extends AppCompatActivity { SearchView mSearchView; ・・・ @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // 検索バーを追加(必須) getMenuInflater().inflate(R.menu.main, menu); // 文字色、サイズの変更とプレースホルダーセット(任意) SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchAutoComplete.setHintTextColor(Color.rgb(0xff, 0xff, 0xff)); searchAutoComplete.setTextSize(25); searchAutoComplete.setHint("検索キーワード"); return true; } }
検索ボタンのイベントをハンドリング
次に検索された時のイベントをハンドリング
MainActivityでSearchFragment.SearchFragmentListenerをimplementsして、SearchView.OnQueryTextListenerを実装すればok。
MainActivity.java
public class MainActivity extends AppCompatActivity implements SearchFragment.SearchFragmentListener { ・・・ @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); // ★ 追加 MenuItem menuItem = menu.findItem(R.id.search_menu_search_view); mSearchView = (SearchView) menuItem.getActionView(); mSearchView.setOnQueryTextListener(this.onQueryTextListener); } // ★ 追加 private SearchView.OnQueryTextListener onQueryTextListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String searchWord) { // ★ 検索ボタンでここが呼ばれる return true; } @Override public boolean onQueryTextChange(String newText) { return false; } }; }
以上です