LoginSignup
15
15

More than 5 years have passed since last update.

【Android】SearchViewの中に含まれているViewをカスタマイズする方法

Last updated at Posted at 2013-11-13

今回SearchViewを使用して検索ボックスを実装することにしたんだけど、いざアイコンやEditTextの入力時の色を変更しようとした時に色々試したので紹介する。

試したこと

  • SearchViewにViewを取得できるメソッド or 変更を加えるメソッドがないかどうか
    • そんなもんなかった
  • Themeを上書きしてSearchViewのとこ書き換えられないかどうか
    • アクセスできるプロパティじゃなかった悲しい

最終的にやったこと

結局色々検索した結果、SearchViewを拡張して直接Viewを取ってこれるようにする方法にした

実装

SearchView.java
public class SearchView extends android.widget.SearchView {
    private ImageView searchButton;
    private AutoCompleteTextView queryText;
    private ImageView closeButton;
    private ImageView searchGoButton;
    private ImageView voiceButton;
    private ImageView searchHintIcon;

    public SearchView(Context context) {
        super(context);
        init();
    }

    public SearchView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        searchButton = (ImageView) findViewById(getIdentifier("android:id/search_button"));
        queryText = (AutoCompleteTextView) findViewById(getIdentifier("android:id/search_src_text"));
        closeButton = (ImageView) findViewById(getIdentifier("android:id/search_close_btn"));
        searchGoButton = (ImageView) findViewById(getIdentifier("android:id/search_go_btn"));
        voiceButton = (ImageView) findViewById(getIdentifier("android:id/voiceButton"));
        searchHintIcon = (ImageView) findViewById(getIdentifier("android:id/search_mag_icon"));
    }

    private int getIdentifier(String resourceId) {
        return getContext().getResources().getIdentifier(resourceId, null, null);
    }

    public ImageView getSearchButton() {
        return searchButton;
    }

    public AutoCompleteTextView getQueryText() {
        return queryText;
    }

    public ImageView getCloseButton() {
        return closeButton;
    }

    public ImageView getSearchGoButton() {
        return searchGoButton;
    }

    public ImageView getVoiceButton() {
        return voiceButton;
    }

    public ImageView getSearchHintIcon() {
        return searchHintIcon;
    }
}

んでもってこんな感じにセットする

MainActivity.java
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SearchView search = (SearchView) findViewById(R.id.main_search);
        search.getQueryText().setTextColor(getResources().getColor(android.R.color.holo_orange_dark));
        search.getCloseButton().setImageResource(android.R.drawable.ic_delete);
        search.getSearchHintIcon().setImageResource(android.R.drawable.ic_menu_camera);
    }
}

結果はこんな感じ

通常
device-2013-11-12-004154.png

上のSearchViewを実装した後
device-2013-11-12-235257.png

これに加えてXML経由からTextSizeをセットできるようにしたけど今回は割愛。

SearchViewクラスのprivate AutoCompleteTextView queryTextの行の型はSearchAutoCompleteなんだけど、アクセスできない型だったのでEditTextにした。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15