2013年4月2日火曜日

[Android]SearchViewを使うために工夫したあれこれ

最近オレ得アプリを公開しました。

風来のシレン4 攻略支援ツール〜アイテム識別管理、値段識別〜

このアプリ内でSearchViewを使っているのですが、使うにあたって色々と設定をするのに苦労したので忘れないように記録を残しておこうと思います。

詳しくは以下。



ソフトキーボードを閉じた時にSearchViewを閉じる


通常SearchViewが開いている時にバックナビゲーションやアップナビゲーションをしてソフトキーボードを閉じてもSearchViewは開いたままになっています。
そのためSearchViewを閉じるためにはもう一度バックナビゲーション、アップナビゲーションをしてあげる必要があります。

自分で作ったアプリを触っていて思ったのですがこれは結構使い勝手が悪いです。
なので、一度のナビゲーションでSearchViewが閉じるようにしました。

やり方はSearchViewのsetOnQueryTextFocusChangeListenerの中でcollapseActionView()を呼び出すようにします。

        searchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                mSearchMenuItem.collapseActionView();
            }
        });


SearchViewを開いた状態でActivityを開く


今回作ったアプリは検索クエリを入力するActivityと検索結果を表示するActivityを分けました。さらに再検索できるようにしたかったので、検索結果表示用ActivityにもSearchViewを配置しました。
この場合、SearchViewは開いた状態で検索文字列が入っている状態にしたかったので以下のようにしました。
 
        final MenuItem searchItem = menu.findItem(R.id.menu_search);  
        searchItem.expandActionView();
        SearchView searchView = (SearchView) searchItem.getActionView();
        String query = getActivity().getIntent().getStringExtra(SearchManager.QUERY);
        searchView.setQuery(query, false);


SearchViewを閉じた時にActivityを終了する


今回のアプリでは検索結果表示用のActivityから検索用のActivityに戻るときに、SearchViewを開いているため2回のナビゲーションが必要になっていました。(1.SearchView閉じる 2.Activity遷移)
これも凄い煩わしかったので1回のナビゲーションで戻れるようにしました。
具体的にはMenuItemのsetOnActionExpandListenerのonMenuItemActionCollapseでActivityをFnishしているだけです。

         searchItem.setOnActionExpandListener(new OnActionExpandListener() {     
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                // 何もしないよ。
                return false;
            }
            
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                getActivity().finish();
                return true;
            }
        });


Landscapeの時にSearchViewの入力モードがフルスクリーンにならないようにする


なぜかLandscapeにするとフルスクリーンになって困っていました。これはsearchableの中でimeOptionsにflagNoExtractUiを設定すればいいみたいです。
 


以上が今回のアプリでSearchViewを使うために工夫したあれこれです。
あれこれやったのである程度は自分の意図する動きにすることができたんですけど、やり方がわからずに妥協した部分があったりします。

  • 検索結果用Activity表示時にSearchViewのフォーカスを外したい
  • 検索結果用Activityから検索用Activityに戻ってきた時に検索用ActivityのSearchViewを閉じた状態にしたい

以上2点のやり方をご存知の方がいましたらぜひ教えて下さいー!

0 件のコメント:

コメントを投稿