hogepiyoエンジニアリング

トラブルシューティングからノウハウ、作ってみた系まで扱う情報系ブログ

SearchViewを虫眼鏡アイコンタップ以外でも展開したい

やりたいこと

Androidで検索機能を実装するときに利用できるSearchViewというコンポーネントがあります

タップすると検索テキストが入力できて、決定するとリスナーが呼ばれる便利なやつです

SearchViewを何も設定せずに使うと👇のように虫眼鏡アイコンをタップしたときに検索テキストが入力できるようになります

f:id:marshi:20180930020554g:plain

appbarとかでSearchViewを使用する場合の挙動としてはこれでいいと思うのですが、自分は虫眼鏡アイコンより右側の領域をタップした場合もテキスト入力できるようにしたかったのでその方法を探しました

結果

結果は👇になります

f:id:marshi:20180930021013g:plain

方法

テキスト入力領域を展開するという処理を明示的に呼び出せば良いのですが、そういったわかり易い名前のメソッドはSearchViewにはありません

正確にはSearchView#onSearchClickedというメソッドがあるのですが、残念ながらpackage privateです

しかし、SearchView#setIconifiedというメソッドがあり、これがpublicメソッドです

public void setIconified(boolean iconify) {
        if (iconify) {
            onCloseClicked();
        } else {
            onSearchClicked();
        }
}

ということでSearchViewのonClickListenerでsetIconifiedをfalseで呼び出してやると虫眼鏡以外のSearchViewの領域をタップしたときでも検索テキストが展開できます

以上