web-dev-qa-db-ja.com

AndroidアクションバーでのSearchViewのスタイル設定

アクションバーに次のような検索ウィジェットがあります。

Search Widget in Action Bar

(1)「iPhone」というテキストの色を変更するにはどうすればよいですか?

(2)また、灰色のXに気付いた場合は、アイコンの位置にある検索ウィジェット全体もその色になります。私はHolo.Theme.Lightを使用しており、独自のMODを利用しています。

Styles.xmlファイルでウィジェットのこれら2つのスタイルを変更するにはどうすればよいですか(検索ウィジェットの変更を行う場所を想定しています)。

33
KickingLettuce

設定する必要があります

searchView.setBackgroundColor(Color.WHITE);

SearchViewsはそれほどカスタマイズできません。

9
lokoko

私はこれに多くの時間を費やしてきましたが、最終的には:-)

1)テキストの色を変更するには:

((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text)).setTextColor(Color.WHITE);

2)テキストヒントを変更するには:

((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(Color.WHITE);
50
Adidas

Appcompatライブラリを使用している場合、解決策はJeromeの答えとは少し異なります。これが私の解決策です

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main_menu, menu);
    restoreActionBar();

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setHintTextColor(Color.WHITE);
    searchAutoComplete.setTextColor(Color.WHITE);

    View searchplate = (View)searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
    searchplate.setBackgroundResource(R.drawable.texfield_searchview_holo_light);

    ImageView searchCloseIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_close_btn);
    searchCloseIcon.setImageResource(R.drawable.clear_search);

    ImageView voiceIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_voice_btn);
    voiceIcon.setImageResource(R.drawable.abc_ic_voice_search);

    ImageView searchIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);
    searchIcon.setImageResource(R.drawable.abc_ic_search);


    return super.onCreateOptionsMenu(menu);
}
15
Abdul Rahman

検索ビューのスタイルを変更できます。編集テキスト、音声アイコンを調整するために使用したコードは次のとおりです...

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_plate", null, null);
        searchView.findViewById(searchPlateId).setBackgroundResource(R.drawable.textfield_search_selected);

        int voiceSearchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/submit_area", null, null);
        searchView.findViewById(voiceSearchPlateId).setBackgroundResource(R.drawable.textfield_search_right_selected);

        // change hint color
        int searchTextViewId = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
        TextView searchTextView = (TextView) searchView.findViewById(searchTextViewId);
        searchTextView.setHintTextColor(getResources().getColor(R.color.light_grey));

[編集]より完全な答えはここにあります: searchviewウィジェットの背景のドローアブルを変更する

13
Jerome VDL

Lollipopの時点では、ブログ投稿からこのような検索ビューをスタイルできます http://Android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

values/themes.xml:
<style name=”Theme.MyTheme” parent=”Theme.AppCompat”>
    <item name=”searchViewStyle”>@style/MySearchViewStyle</item>
</style>
<style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”>
    <!-- Background for the search query section (e.g. EditText) -->
    <item name="queryBackground">...</item>
    <!-- Background for the actions section (e.g. voice, submit) -->
    <item name="submitBackground">...</item>
    <!-- Close button icon -->
    <item name="closeIcon">...</item>
    <!-- Search button icon -->
    <item name="searchIcon">...</item>
    <!-- Go/commit button icon -->
    <item name="goIcon">...</item>
    <!-- Voice search button icon -->
    <item name="voiceIcon">...</item>
    <!-- Commit icon shown in the query suggestion row -->
    <item name="commitIcon">...</item>
    <!-- Layout for query suggestion rows -->
    <item name="suggestionRowLayout">...</item>
</style>
7
QAMAR
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search));
searchView.setSubmitButtonEnabled(true); // to enable submit button

ImageView b = (ImageView) searchView.findViewById(Android.support.v7.appcompat.R.id.search_go_btn);
b.setImageResource(Android.R.drawable.ic_menu_search); //to change submit button icon

TextView a=(TextView) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
a.setTextColor(...); //to change color of search text
4
Ali Ziaee

これを解決する方法は、Holo.Light.DarkActionBarテーマを使用することでした。そうでなければ、検索ウィジェットを簡単に変更できるとは思わない。

3
KickingLettuce

onCreateOptionsMenu :

int id = searchView.getContext()
                   .getResources()
                   .getIdentifier("Android:id/search_src_text", null, null);
    TextView textView = (TextView) searchView.findViewById(id);
    textView.setTextColor(Color.WHITE);
2
Mina Gabriel
@Override
    public boolean onCreateOptionsMenu(Menu menu) {

        super.onCreateOptionsMenu(menu);

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);

        // Associate search configuration with the SearchView
        SearchManager searchManager =
               (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setQueryHint("Client/DOB/PPSN");
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

        // Setting the textview default behaviour properties
        int id = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
        TextView textView = (TextView) searchView.findViewById(id);
        textView.setTextColor(Color.WHITE);
        textView.setHintTextColor(Color.WHITE);

        // Set the search plate color to white
        int linlayId = getResources().getIdentifier("Android:id/search_plate", null, null);
        View view = searchView.findViewById(linlayId);
        Drawable drawColor = getResources().getDrawable(R.drawable.searchcolor);
        view.setBackground( drawColor );
        return super.onCreateOptionsMenu(menu);

    }

今、これは検索バーのプレートカラーを変更するためのxmlファイルsearchcolor.xmlです

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
  <item>
      <shape >
          <solid Android:color="#ffffff" />
      </shape>
  </item>

  <!-- main color -->
  <item Android:bottom="1.5dp"
      Android:left="1.5dp"
      Android:right="1.5dp">
      <shape >
          <solid Android:color="#2c4d8e" />
      </shape>
  </item>

  <!-- draw another block to cut-off the left and right bars -->
  <item Android:bottom="10.0dp">
      <shape >
          <solid Android:color="#2c4d8e" />
      </shape>
  </item>
</layer-list>

およびアクションバーで検索を作成するためのmenu/menu.xml

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item Android:id="@+id/search"
          Android:icon="@drawable/search"
          Android:showAsAction="ifRoom"
          Android:actionViewClass="Android.widget.SearchView" />

</menu>
0
M.Raheel

XxxActivity.JavaファイルでSearchViewを取得してから:

SearchView searchView = (SearchView)menu.findItem(R.id.my_search_view).getActionView();
int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_plate", null, null);

// Getting the 'search_plate' LinearLayout.
View searchPlate = searchView.findViewById(searchPlateId);
searchPlate.setBackgroundResource(R.drawable.textfield_searchview);

ファイルを作成res/drawable/texfield_searchview.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_focused="true"
        Android:drawable="@drawable/textfield_search_selected_holo_light" />
    <item Android:drawable="@drawable/textfield_search_default_holo_light" />
</selector>
0
Jas

白いテキストが必要な場合は、サポートライブラリを使用している場合は、Holo.ThemeまたはTheme.AppCompat.Light.DarkActionBarのような黒い背景を持つアクションバーテーマから拡張する必要があります。
他の設定は必要ありません。

0
Mehdiway