Changing action bar searchview hint text color

后端 未结 18 1363
时光说笑
时光说笑 2020-12-12 21:47

How can I change the action bar search view hint text colour?

This question explains how to get the EditText when using ABS: Android ActionBar Customize Search View

相关标签:
18条回答
  • 2020-12-12 22:33

    By using this you can change the Searchable xml

    1. Search text hint color
    2. Search Text
    3. Search close icon
    4. Search hint icon
    5. Search plate
    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));
    

    Here is 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>
    
    0 讨论(0)
  • 2020-12-12 22:34

    With the most recent appcompat library (or if you're targeting 5.0+), this is possible to do purely in XML using a ThemeOverlay:

    <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>
    

    And then in your layout file:

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

    If you also want it to apply to activities that are using an ActionBar instead of a Toolbar, you can add this to the Activity's theme:

    <style name="Theme.MyApp" parent="Theme.AppCompat">
        <item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
        ...
    </style>
    
    0 讨论(0)
  • 2020-12-12 22:34

    Try this code. It is very easy.

        // 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));

    0 讨论(0)
  • 2020-12-12 22:36

    A SearchView object extends from LinearLayout, so it holds other views. The trick is to find the view holding the hint text and change the colour programmatically. By traversing the view hierarchy, you can find the widget containing the hint text:

    // 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));
    

    This method works with any theme. Also, you can change the look of other widgets in the SearchView hierarchy, such as the EditText holding the search query.

    0 讨论(0)
  • 2020-12-12 22:36
    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 讨论(0)
  • 2020-12-12 22:37

    Here's specifically how you apply the style as hinted at above. The right answer is to overload the action bar widget style with your own custom style. For holo light with dark action bar, put this in your own styles file such as 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>
    

    Make sure your application is using theme custom theme as described in enter link description here

    0 讨论(0)
提交回复
热议问题