web-dev-qa-db-ja.com

アクションバーの検索ビューのヒントテキストの色を変更する

アクションバーの検索ビューのヒントテキストの色を変更するにはどうすればよいですか?

この質問では、ABSを使用するときにEditTextを取得する方法について説明します。 Android ActionBar検索ビューのカスタマイズ

EditTextへの参照を取得するために使用できるAndroid.R.idがあり、ヒントの色を変更できますか?または、色を変更する他の方法はありますか?

Action bar search view hint text

48
Juhani

Android:actionBar Widget ThemeメインテーマのAndroid:textColorHintを含むスタイルを指す必要があります。これにより、検索ビューのヒントテキストの色を変更できます。

53
Kirill
searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.hintSearchMess) + "</font>"));
53
Vadim Teselkin
SearchView searchView= (SearchView) findViewById(R.id.searchView1);
int id = searchView.getContext()
                   .getResources()
                   .getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
22
Amr Angry

これは私のために働いた、それが役立つことを願って

((EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(getResources().getColor(R.color.white));

これも参照

16
Syed Raza Mehdi

このテーマをメインテーマに追加して解決しました。

<style name="AppTheme" parent="AppBaseTheme">
    .....
    .....
    <item name="Android:actionBarWidgetTheme">@style/MyActionBarWidgetTheme</item> 
</style>

そして、この場合はヒントの色を変更したいプロパティを追加します。

<style name="MyActionBarWidgetTheme" parent="@Android:style/Theme.Holo">
    .....
    .....
    <item name="Android:textColorHint">@color/blanco_60</item>
</style>

それが役立つことを願っています:D

11
Kokusho

上記で示したように、具体的にスタイルを適用する方法を次に示します。正しい答えは、アクションバーのウィジェットスタイルを独自のカスタムスタイルでオーバーロードすることです。暗いアクションバーが付いたホロライトの場合、res/values/styles_mytheme.xmlなどの独自のスタイルファイルにこれを配置します。

<style name="Theme.MyTheme" parent="@Android:style/Theme.Holo.Light.DarkActionBar">
    <item name="Android:actionBarWidgetTheme">@style/Theme.MyTheme.Widget</item>
    <!-- your other custom styles -->
</style>

<style name="Theme.MyTheme.Widget" parent="@Android:style/Theme.Holo">
    <item name="Android:textColorHint">@Android:color/white</item>
    <!-- your other custom widget styles -->
</style>

ここにリンクの説明を入力してください で説明されているように、アプリケーションがテーマのカスタムテーマを使用していることを確認してください

7
johnarleyburns

SearchViewオブジェクトはLinearLayoutから拡張されるため、他のビューを保持します。ヒントは、ヒントテキストを保持しているビューを見つけて、プログラムで色を変更することです。ビュー階層を走査すると、ヒントテキストを含むウィジェットを見つけることができます。

// get your SearchView with its id
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
// traverse the view to the widget containing the hint text
LinearLayout ll = (LinearLayout)searchView.getChildAt(0);
LinearLayout ll2 = (LinearLayout)ll.getChildAt(2);
LinearLayout ll3 = (LinearLayout)ll2.getChildAt(1);
SearchView.SearchAutoComplete autoComplete = (SearchView.SearchAutoComplete)ll3.getChildAt(0);
// set the hint text color
autoComplete.setHintTextColor(getResources().getColor(Color.WHITE));

このメソッドは、どのテーマでも機能します。また、検索クエリを保持するSearchViewなど、EditText階層内の他のウィジェットの外観を変更できます。

7
jfcartier

検索ウィジェットのtextView idを取得し、setTextColor()メソッドを使用して検索テキストの色を変更し、setHintTextColor()メソッドを使用して検索ヒントのテキストの色を変更します。

// Get textview id of search widget
int id =  searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);

// Set search text color
textView.setTextColor(Color.WHITE);

// Set search hints color
textView.setHintTextColor(Color.GRAY);
5
Ferdous Ahamed

検索ビューで左矢印ボタンを変更する場合は、app:collapseIconを追加します。

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="@color/colorPrimary"
        app:collapseIcon="@drawable/ic_search_view_home"
        />

テキストの色とヒントの色を変更する場合は、次を追加します。

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

閉じるアイコンを変更する場合は、次を追加します。

ImageView imvClose = searchView.findViewById(Android.support.v7.appcompat.R.id
            .search_close_btn);
    imvClose.setImageResource(R.drawable.ic_search_view_close);
5
Zin Myo Oo

最新のappcompatライブラリ(または5.0+を対象としている場合)では、ThemeOverlayを使用して純粋にXMLで行うことができます。

<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="autoCompleteTextViewStyle">@style/Widget.MyApp.AutoCompleteTextView.SearchView</item>
</style>

<style name="Widget.MyApp.AutoCompleteTextView.SearchView" parent="Widget.AppCompat.AutoCompleteTextView">
    <item name="Android:textColor">#000</item>
    <item name="Android:textColorHint">#5000</item>
</style>

そして、レイアウトファイルで:

<Android.support.v7.widget.Toolbar
    app:theme="@style/ThemeOverlay.MyApp.ActionBar"
    ... />

ActionBarの代わりにToolbarを使用しているアクティビティにも適用したい場合、これをActivityのテーマに追加できます。

<style name="Theme.MyApp" parent="Theme.AppCompat">
    <item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
    ...
</style>
3
Jarett Millard

このクラスを見ると、問題の解決に役立ちます

import Android.R.color;
import Android.content.Context;
import Android.graphics.Typeface;
import Android.widget.ImageView;

import com.actionbarsherlock.widget.SearchView;
import com.actionbarsherlock.widget.SearchView.SearchAutoComplete;

public class MySearchView {

    public static SearchView getSearchView(Context context, String strHint) {
        SearchView searchView = new SearchView(context);
        searchView.setQueryHint(strHint);
        searchView.setFocusable(true);
        searchView.setFocusableInTouchMode(true);
        searchView.requestFocus();
        searchView.requestFocusFromTouch();

        ImageView searchBtn = (ImageView) searchView.findViewById(R.id.abs__search_button);
        searchBtn.setImageResource(R.drawable.ic_menu_search);

        // ImageView searchBtnClose = (ImageView) searchView.findViewById(R.id.abs__search_close_btn);
        // searchBtnClose.setImageResource(R.drawable.ic_cancel_search_bar);


        SearchAutoComplete searchText = (SearchAutoComplete) searchView.findViewById(R.id.abs__search_src_text);
        setFont(context, searchText);
        searchText.setTextColor(context.getResources().getColor(color.white));
        searchText.setHintTextColor(context.getResources().getColor(color.white));

        return searchView;
    }

    private static void setFont(Context _context, SearchAutoComplete searchText) {
        Typeface tf = null;
        Typeface currentType = searchText.getTypeface();
        if (currentType == null) {
            tf = MyApplication.fontNormal;
        }
        else {
            int currentStyle = currentType.getStyle();
            if (currentStyle == Typeface.BOLD) {
                tf = MyApplication.fontBold;
            }
            else if (currentStyle == Typeface.BOLD_ITALIC) {
                tf = MyApplication.fontBoldItalic;
            }
            else if (currentStyle == Typeface.ITALIC) {
                tf = MyApplication.fontItalic;
            }
            else {
                tf = MyApplication.fontNormal;
            }
        }
        searchText.setTypeface(tf);
    }

    public static SearchView getSearchView(Context context, int strHintRes) {
        return getSearchView(context, context.getString(strHintRes));
    }
}
3
sonida

このコードを試してください。それは非常に簡単です。

    // Associate searchable configuration with the SearchView
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        EditText searchEditText = (EditText) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
           searchEditText.setHint("Search");
        searchEditText.setHintTextColor(getResources().getColor(R.color.white));
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

searchEditText.setHintTextColor(getResources()。getColor(R.color.white));

2
Jignesh Goyani

検索ビューのヒントテキストの色を変更するソリューションは次のとおりです。

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

これを使用して、Searchable xmlを変更できます

  1. 検索テキストのヒントの色
  2. 検索テキスト
  3. 検索閉じるアイコン
  4. 検索ヒントアイコン
  5. サーチプレート
int searchHintBtnId = searchView.getContext().getResources()
                    .getIdentifier("Android:id/search_mag_icon", null, null);
     int hintTextId = searchView.getContext()
                    .getResources()
                    .getIdentifier("Android:id/search_src_text", null, null);
            int closeBtnId = searchView.getContext()
                    .getResources()
                    .getIdentifier("Android:id/search_close_btn", null, null);
            // Set the search plate color to white
            int searchPlateId = getResources().getIdentifier("Android:id/search_plate", null, null);

            View view = searchView.findViewById(searchPlateId);
            view.setBackgroundResource(R.drawable.search_plate);

            ImageView closeIcon = (ImageView) searchView.findViewById(closeBtnId);
            closeIcon.setImageResource(R.drawable.close);

            ImageView searchHintIcon = (ImageView) searchView.findViewById(searchHintBtnId);
            searchHintIcon.setImageResource(R.drawable.search);

            TextView textView = (TextView) searchView.findViewById(hintTextId);
            textView.setTextColor(getResources().getColor(R.color.search_text_color));
            textView.setHintTextColor(getResources().getColor(R.color.search_hint_text_color));

これがdrawable/search_plate.xmlです

<!-- main color -->
<item Android:bottom="1dp"
    Android:left="1dp"
    Android:right="1dp">
    <shape >
        <solid Android:color="@color/app_theme_color" />
    </shape>
</item>

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

これはstyles.xmlを使用して簡単に実現できます。SearchViewのテーマ設定は、menu.xmlとしてフェッチされるapp:actionViewClassのツールバーのテーマに直接関連していることを理解してください。

  1. ツールバーのスタイルを作成します。
  2. そのスタイルをツールバーのテーマとして適用すると、関連するビューとそのプロパティがすべて変更されます。
0
sud007

また、menuItemでSearchViewを手動で設定して、ビューを完全に制御できます。

0
Moritz
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);
0