Apakah mungkin untuk mengubah warna teks pada Android SearchView?

115

Elemen SearchView tidak memiliki properti apa pun untuk mengubah warna teks. Warna teks default adalah hitam dan tidak berfungsi pada latar belakang gelap kita. Apakah ada cara untuk mengubah warna teks tanpa menggunakan peretasan?

Saya menemukan pertanyaan serupa ini terkait dengan mengubah ukuran teks, tetapi sejauh ini, tidak ada jawaban: Bagaimana cara mengatur SearchView TextSize?

CACuzcatlan
sumber
1
Saya ingin jawaban untuk ini.
TheLettuceMaster
tolong sebutkan apa yang telah Anda coba.
Sahil Mahajan Mj

Jawaban:

121

Menambahkan

<item name="android:editTextColor">@android:color/white</item>

ke tema induk dan itu harus mengubah teks yang dimasukkan. Anda juga bisa menggunakan

<item name="android:textColorHint">@android:color/white</item>

untuk mengubah teks petunjuk untuk SearchView. (Perhatikan bahwa Anda dapat mengganti @android:color/whitedengan nilai apa pun yang sesuai yang ingin Anda gunakan)

akdotcom.dll
sumber
1
Ini memperbaikinya untuk saya, dan tidak melibatkan kejahatan rumit menggunakan refleksi. Juga berfungsi dengan appcompat.
dj_bushido
Anda juga bisa menyetel android: theme di searchview ke gaya yang memiliki elemen android: editTextColor. Dengan cara ini Anda hanya mempengaruhi tampilan pencarian itu.
Pepijn
2
Berhasil! Saya menggunakan tampilan pencarian di dalam toolbar, memperpanjang ThemeOverlay.AppCompat.Light dan menambahkan item di atas dan mengatur gaya pada widget Toolbar;) Bekerja seperti pesona ...
codename_47
Solusi ini tidak berhasil untuk saya. Teks masih memiliki warna yang salah. Jawaban di bawah ini dengan mengatur warna petunjuk secara terprogram bekerja untuk saya.
Dominik
4
Masalah dengan jawaban ini adalah bahwa itu juga akan mengubah warna teks EditTexts Anda . Satu-satunya solusi yang berhasil bagi saya yang mengubah SearchViewwarna teks saja ada di sini: stackoverflow.com/a/40550067/1617737
ban-geoengineering
96

Cobalah sesuatu seperti ini: Anda akan mendapatkan pegangan ke textview dari sdk dan kemudian mengubahnya karena mereka tidak mengeksposnya secara publik.

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
lokoko
sumber
Saya suka solusi elegan
Mohsen Afshin
29
Ini selalu mengembalikan null
danielrvt-sgb
Perhatikan bahwa jika Anda menggunakan ActionBarSherlock, ID tampilan akan berbeda. Misalnya, lib saat ini menyetel ID teks edit ke "package: id / abs__search_src_text", yang bisa diakses langsung melalui R.id.abs__search_src_text.
greg7gkb
3
Juga, apa yang sebenarnya ingin saya ubah adalah warna teks petunjuk SearchView, yang dilakukan dengan mudah melalui textView.setHintTextColor ().
greg7gkb
3
Ini adalah peretasan yang sangat kotor. Gunakan android: editTextColor dan android: textColorHint sebagai gantinya seperti yang disarankan akdotcom
Philipp Hofmann
69

Ini berhasil untuk saya.

SearchView searchView = (SearchView) findViewById(R.id.search);
EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));
pengguna2331095
sumber
1
Ini juga berfungsi jika Anda mendapatkan tampilan sebagai TextView atau bahkan sebagai AutoCompleteTextView.
Juan José Melero Gómez
Ya, ini berhasil untuk saya setelah mengikuti saran dari @ JuanJoséMeleroGómez
Parth Patel
Saya kira, ini disalin dan dipersingkat dari jawaban saya di sini: stackoverflow.com/a/26251197/2914140 .
CoolMind
24

Saya ingin melakukan hal serupa. Saya akhirnya harus menemukan di TextViewantara SearchViewanak - anak:

for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
    textView.setTextColor(Color.WHITE);
}

Jika Anda menginginkan metode util:

public static <V extends View> Collection<V> findChildrenByClass(ViewGroup viewGroup, Class<V> clazz) {

    return gatherChildrenByClass(viewGroup, clazz, new ArrayList<V>());
}

private static <V extends View> Collection<V> gatherChildrenByClass(ViewGroup viewGroup, Class<V> clazz, Collection<V> childrenFound) {

    for (int i = 0; i < viewGroup.getChildCount(); i++)
    {
        final View child = viewGroup.getChildAt(i);
        if (clazz.isAssignableFrom(child.getClass())) {
            childrenFound.add((V)child);
        }
        if (child instanceof ViewGroup) {
            gatherChildrenByClass((ViewGroup) child, clazz, childrenFound);
        }
    }

    return childrenFound;
}
Ferran Maylinch
sumber
3
Saya juga mendapatkan pengecualian nol dengan solusi sebelumnya, dan ini berhasil untuk saya!
Diego Ponciano
1
Ini harus ditandai sebagai jawaban yang diterima. Yang di atas memberikan null. Terima kasih untuk
rekan
3
Solusi ini sangat menjijikkan tetapi satu-satunya yang benar-benar berfungsi dan itu adalah tim Android yang harus disalahkan!
Ofek Ron
Bagaimana kita mengakses ikon pencarian dengan ini?
Yasin Yaqoobi
17

Berkat @CzarMatt saya menambahkan dukungan AndroidX .

Bagi saya karya berikut ini. Saya menggunakan kode dari tautan: Ubah warna teks petunjuk pencarian di bilah tindakan menggunakan pustaka dukungan .

    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

    EditText txtSearch = ((EditText)searchView.findViewById(androidx.appcompat.R.id.search_src_text));
    txtSearch.setHint(getResources().getString(R.string.search_hint));
    txtSearch.setHintTextColor(Color.LTGRAY);
    txtSearch.setTextColor(Color.WHITE);

Mengubah warna teks petunjuk tampilan bilah tindakan memberi saran solusi lain. Ia bekerja tetapi hanya mengatur teks petunjuk dan warna.

    searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));
CoolMind
sumber
1
Gunakan androidx.appcompat.R.id.search_src_textjika Anda telah memigrasikan proyek Anda ke AndroidX.
CzarMatt
16

Ini paling baik dicapai melalui gaya kustom. Keluarkan gaya widget panel tindakan dengan gaya kustom Anda sendiri. Untuk cahaya holo dengan bilah tindakan gelap, letakkan ini di file gaya Anda sendiri seperti 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>

Pastikan aplikasi Anda menggunakan theme custom theme seperti yang dijelaskan dalam masukkan deskripsi tautan di sini

johnarleyburns
sumber
14

Anda dapat melakukannya dengan menyetel editTextColoratribut dalam gaya.

<style name="SearchViewStyle" parent="Some.Relevant.Parent">
    <item name="android:editTextColor">@color/some_color</item>
</style>

dan Anda menerapkan gaya ini ke Toolbaratau SearchViewdalam tata letak.

<android.support.v7.widget.Toolbar
    android:theme="@style/SearchViewStyle">

    <android.support.v7.widget.SearchView />

</android.support.v7.widget.Toolbar>
oldergod.dll
sumber
+1 Ini mengalahkan semua solusi yang melibatkan imho findViewById. Gaya tampilan harus digunakan jika memungkinkan.
Mattias
Ini harus menjadi jawaban yang diterima! Sangat bersih dan mudah.
MSeiz5
8

jika Anda menggunakan - android.support.v7.widget.SearchView

SearchView searchView = (SearchView) item.getActionView();
EditText editText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
editText.setTextColor(Color.WHITE);

di Kotlin

val searchView = SearchView(this)
val editText = searchView.findViewById<EditText>(androidx.appcompat.R.id.search_src_text)
editText.setTextColor(Color.WHITE)

Anda sebaiknya mulai menggunakan pustaka dukungan androidx sekarang

zankoav.dll
sumber
7

Buat Style untuk Anda Toolbar

<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:editTextColor">@color/some_color</item>
</style>

Dan tetapkan sebagai tema untuk file Toolbar

<android.support.v7.widget.Toolbar
    android:theme="@style/AppTheme.Toolbar"
    ...
Arbitur
sumber
6

Jika Anda menggunakan android.support.v7.widget.SearchView, ini dapat dilakukan tanpa harus menggunakan refleksi.

Inilah cara saya melakukannya di aplikasi saya:

EditText text = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);

if (searchPlate != null) {
    searchPlate.setBackgroundResource(R.drawable.search_background);
}

if (text != null){
    text.setTextColor(resources.getColor(R.color.white));
    text.setHintTextColor(getResources().getColor(R.color.white));

    SpannableStringBuilder magHint = new SpannableStringBuilder("  ");
    magHint.append(resources.getString(R.string.search));

    Drawable searchIcon = getResources().getDrawable(R.drawable.ic_action_view_search);
    int textSize = (int) (text.getTextSize() * 1.5);
    searchIcon.setBounds(0, 0, textSize, textSize);
    magHint.setSpan(new ImageSpan(searchIcon), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    // Set the new hint text
    text.setHint(magHint);

}

if (searchCloseIcon != null){
    searchCloseIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_close));
}

ID tersebut tidak mengekspos id secara publik untuk SearchView non appcompat, tetapi melakukannya untuk AppCompat jika Anda tahu di mana mencarinya. :)

LukeWaggoner
sumber
Ini sebenarnya berfungsi dengan cukup baik di berbagai perangkat. Bagus.
Hiu
5

Saya punya masalah ini, dan ini berhasil untuk saya.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.customer_menu, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView       = (SearchView) menu.findItem(R.id.menu_customer_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        searchView.setOnQueryTextListener(this);

        //Applies white color on searchview text
        int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        TextView textView = (TextView) searchView.findViewById(id);
        textView.setTextColor(Color.WHITE);

        return true;
}
Alexandre
sumber
4
Saya selalu mendapatkan null pada: (TextView) searchView.findViewById (id);
danielrvt-sgb
4

Jika Anda mendasarkan tema aplikasi Anda pada tema holo, Anda akan mendapatkan teks putih, bukan hitam di SearchView Anda

<style name="Theme.MyTheme" parent="android:Theme.Holo">

Saya tidak menemukan cara lain untuk mengubah warna teks tampilan pencarian tanpa menggunakan peretasan kotor.

Tjeerd
sumber
1
Ini tidak berhasil. Saya berharap begitu, karena ini jauh lebih bersih daripada mencari ID tampilan "ajaib" secara manual. Saya mencoba beberapa tema, dengan aktivitas yang tata letaknya memiliki latar belakang gelap, tetapi tidak ada yang menghasilkan apa pun selain teks hitam di SearchView.
E-Riz
4

Cara paling bersih adalah:

Toolbar menggunakan tema ThemeOverlay.AppCompat.Dark.Actionbar.

Sekarang buat anak itu seperti:

toolbarStyle parent "ThemeOverlay.AppCompat.Dark.Actionbar"

tambahkan item ini dengan gaya itu

nama item "android: editTextColor"> warna Anda

Selesai.

Satu hal lagi yang sangat penting adalah, pada toolbar letakkan layout_height = "? Attr / actionbarSize". Secara default itu adalah wrap_content. Bagi saya teks bahkan tidak terlihat di searchview itu memperbaiki masalah itu.

Sharad
sumber
4

Ya itu mungkin menggunakan metode berikut.

public static EditText setHintEditText(EditText argEditText, String argHintMessage, boolean argIsRequire) {
    try {
        if (argIsRequire) {
            argHintMessage = "   " + argHintMessage;
            //String text = "<font color=#8c8c8c>"+argHintMessage+"</font> <font color=#cc0029>*</font>";
            String text = "<font color=#8c8c8c>" + argHintMessage + "</font>";
            argEditText.setHint(Html.fromHtml(text));
        } else {
            argEditText.setHint(argHintMessage);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return argEditText;
}

Pemanggilan metode ini terlihat seperti ini ..

metLoginUserName=(EditText)this.findViewById(R.id.etLoginUserName);
    metLoginPassword=(EditText)this.findViewById(R.id.etLoginPassword);

    /**Set the hint in username and password edittext*/
    metLoginUserName=HotSpotStaticMethod.setHintEditText(metLoginUserName, getString(R.string.hint_username),true);
    metLoginPassword=HotSpotStaticMethod.setHintEditText(metLoginPassword, getString(R.string.hint_password),true);

menggunakannya saya telah berhasil menambahkan tanda warna * merah di petunjuk menggunakan metode ini. Anda harus mengubah metode ini sesuai dengan kebutuhan Anda. Saya harap ini membantu Anda .... :)

DynamicMind
sumber
itu agak sedikit rumit bagiku.
gaols
1
String text = "<font color = # 8c8c8c>" + HintMessage + "</font>"; argEditText.setHint (Html.fromHtml (teks)); Anda juga dapat menggunakan hanya dua kode baris ini untuk mengatur petunjuk warna
DynamicMind
1
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); itu solusi saya, tapi saya pikir solusi Anda lebih baik dari saya, saya akan menggunakan solusi Anda, terima kasih.
gaols
@ gaols apakah kamu punya solusi ..?
DynamicMind
@ gaols, di mana "com.android.internal.R.id.search_src_text" Anda?
wangqi060934
3

Gunakan yang ini, itu benar. : D

AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(color.black));
searchText.setTextColor(getResources().getColor(color.black));
sonida
sumber
3

Ya kita bisa,

SearchView searchView = (SearchView) findViewById(R.id.sv_symbol);

Untuk menerapkan warna putih untuk SerachView Text,

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);

Selamat coding !!!!

Srinivasan
sumber
3

ini bekerja untuk saya.

final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);

searchView.setOnQueryTextListener(this);   
searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) 
{
    searchEditText.setBackgroundColor(getResources().getColor(R.color.c_trasnparent));
    searchEditText.setGravity(Gravity.CENTER);
    searchEditText.setCompoundDrawables(null,null,R.drawable.ic_cross,null);
}
Krishna Mohan Singh
sumber
3

Ubah warna teks yang diketik:

((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setTextColor(Color.WHITE);

Ubah warna teks petunjuk:

((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setHintTextColor(Color.LTGRAY);
Fabio Guerra
sumber
2
TextView textView = (TextView) searchView.findViewById(R.id.search_src_text);
textView.setTextColor(Color.BLACK);
Yuwen
sumber
1

Sebuah SearchViewobjek memanjang dari LinearLayout, sehingga memegang tampilan lain. Triknya adalah menemukan tampilan yang menahan teks petunjuk dan mengubah warna secara terprogram. Masalah dengan mencoba menemukan tampilan berdasarkan id adalah id bergantung dari tema yang digunakan dalam aplikasi. Jadi, bergantung pada tema yang digunakan, findViewById(int id)metode tersebut mungkin kembali null. Pendekatan yang lebih baik yang berfungsi dengan setiap tema adalah melintasi hierarki tampilan dan menemukan widget yang berisi teks petunjuk:

// 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));
// set the text color
autoComplete.setTextColor(Color.BLUE);

Dengan menggunakan metode ini, Anda juga dapat mengubah tampilan widget lain dalam SearchViewhierarki, seperti EditTextmenahan kueri penelusuran. Kecuali jika Google memutuskan untuk segera mengubah hierarki tampilan SearchView, Anda akan dapat mengubah tampilan widget dengan metode ini untuk beberapa waktu.

jfcartier.dll
sumber
1

Anda dapat menyesuaikan tampilan pencarian dengan menggunakan pustaka appcompat v7. Saya menggunakan pustaka appcompat v7 dan menentukan gaya khusus untuknya. Di folder drawable, letakkan file bottom_border.xml yang terlihat seperti ini:

 <?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 <item>
  <shape >
      <solid android:color="@color/blue_color" />
  </shape>
 </item>
 <item android:bottom="0.8dp"
   android:left="0.8dp"
   android:right="0.8dp">
  <shape >
      <solid android:color="@color/background_color" />
  </shape>
 </item>

 <!-- draw another block to cut-off the left and right bars -->
 <item android:bottom="2.0dp">
  <shape >
      <solid android:color="@color/main_accent" />
  </shape>
  </item>
 </layer-list>

Dalam folder nilai styles_myactionbartheme.xml:

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
  <style name="AppnewTheme" parent="Theme.AppCompat.Light">
    <item name="android:windowBackground">@color/background</item>
    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="android:actionBarWidgetTheme">@style/ActionBarWidget</item>
  </style> 
  <!-- Actionbar Theme -->
  <style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/main_accent</item>
    <!-- <item name="android:icon">@drawable/abc_ic_ab_back_holo_light</item> -->
  </style> 
  <style name="ActionBarWidget" parent="Theme.AppCompat.Light">
    <!-- SearchView customization-->
     <!-- Changing the small search icon when the view is expanded -->
    <!-- <item name="searchViewSearchIcon">@drawable/ic_action_search</item> -->
     <!-- Changing the cross icon to erase typed text -->
   <!--   <item name="searchViewCloseIcon">@drawable/ic_action_remove</item> -->
     <!-- Styling the background of the text field, i.e. blue bracket -->
    <item name="searchViewTextField">@drawable/bottom_border</item>
     <!-- Styling the text view that displays the typed text query -->
    <item name="searchViewAutoCompleteTextView">@style/AutoCompleteTextView</item>        
  </style>

    <style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
     <item name="android:textColor">@color/text_color</item>
   <!--   <item name="android:textCursorDrawable">@null</item> -->
    <!-- <item name="android:textColorHighlight">@color/search_view_selected_text</item> -->
  </style>
 </resources>

Saya mendefinisikan file custommenu.xml untuk menampilkan menu:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:com.example.actionbartheme="http://schemas.android.com/apk/res-auto" >  

  <item android:id="@+id/search"
      android:title="@string/search_title"
      android:icon="@drawable/search_buttonn"
      com.example.actionbartheme:showAsAction="ifRoom|collapseActionView"
        com.example.actionbartheme:actionViewClass="android.support.v7.widget.SearchView"/>        
  </menu>

Aktivitas Anda harus memperluas ActionBarActivity, bukan Activity. Berikut adalah metode onCreateOptionsMenu.

  @Override
  public boolean onCreateOptionsMenu(Menu menu) 
  {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.custommenu, menu);
  }

Dalam file manifes:

  <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppnewTheme" >

Untuk informasi lebih lanjut, lihat url ini:
Di sini http://www.jayway.com/2014/06/02/android-theming-the-actionbar/

Suhas Patil
sumber
1

untuk appcompat-v7 Toolbar dengan searchView (disediakan melalui MenuItemCompat):

Menyetel tema Toolbar ke @ style / ThemeOverlay.AppCompat.Light akan menghasilkan warna gelap (hitam) untuk teks petunjuk dan teks yang dimasukkan, tetapi tidak akan memengaruhi warna kursor *. Oleh karena itu, menyetel tema Toolbar ke @ style / ThemeOverlay.AppCompat.Dark akan menghasilkan warna terang (putih) untuk teks petunjuk dan teks yang dimasukkan, kursor * akan tetap putih.

Menyesuaikan tema di atas:

android: textColorPrimary -> warna teks yang dimasukkan

editTextColor -> warna teks yang dimasukkan (akan mengganti pengaruh android: textColorPrimary jika disetel)

android: textColorHint -> warna petunjuk

* Catatan: Saya belum menentukan bagaimana warna Kursor dapat dikontrol (tanpa menggunakan solusi refleksi).

straya
sumber
Warna kursor berasal dari colorControlActivated
Henry
1

Dengan menggunakan ini saya bisa mengubah teks berwarna yang diketik dalam tampilan pencarian

AutoCompleteTextView typed_text = (AutoCompleteTextView) inputSearch.findViewById(inputSearch.getContext().getResources().getIdentifier("android:id/search_src_text", null, null));
typed_text.setTextColor(Color.WHITE);
Dhriti
sumber
1

Wow. Jawaban yang banyak. Itu mendapat nilai warna dari warna primer Anda.

Ubah, dan selesai!

@Override
public void onResume() {
    super.onResume();
    getActivity().setTheme(R.style.YourTheme_Searching);
}

Gaya;

<style name="YourTheme.Searching" parent="YourTheme">
    <item name="android:textColorPrimary">@android:color/white</item>
</style>
Mohamed
sumber
1

ubah gaya searchView di toolbar dengan androidx.

pertama, setel gaya tampilan pencarian dalam Gaya toolbar Anda (ubah menjadi induk dengan basis aplikasi Anda sendiri):

     <!-- toolbar style -->
      <style name="ToolbarStyle" parent="Theme.AppCompat.Light.NoActionBar">     
          <!-- search view about -->
          <item name="android:editTextColor">@color/colorWhitePrimaryText</item>
          <item name="android:textColorHint">@color/colorWhiteSecondaryText</item>
          <item name="android:textCursorDrawable">@drawable/drawable_cursor_white</item>
          <item name="closeIcon">@mipmap/ic_close</item>
          <item name="searchHintIcon">@mipmap/ic_search_white</item>
          <item name="searchIcon">@mipmap/ic_search_white</item>
          <item name="android:longClickable">false</item>
          <item name="android:queryHint">@string/toolbar_search</item>
      </style> 

lalu, gunakan di tata letak bilah alat Anda:

android:theme="@style/ToolbarStyle"

dengan ini, Anda bisa mengubah sebagian besar gaya SearchView kecuali untuk petunjuk kueri.

terakhir tetapkan petunjuk kueri pada opsi menu bilah alat Anda:

toolbar.setOnMenuItemClickListener(item -> {
        switch (item.getItemId()){
            case R.id.toolbar_search:
                SearchView searchView = (SearchView) item.getActionView();
                searchView.setQueryHint("default query");
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String newText) {
                        return false;
                    }
                });
                return true;
                default:
                    return false;
        }
pengguna2333
sumber
Apakah Anda bermaksud memposting sesuatu di bawah "gaya tampilan penelusuran"?
DavidW
Saya telah menyelesaikan dan menyederhanakan solusi saya, mungkin ini dapat membantu Anda.
pengguna2333
0
searchView = (SearchView) view.findViewById(R.id.searchView);

SearchView.SearchAutoComplete searchText = (SearchView.SearchAutoComplete) searchView
      .findViewById(org.holoeverywhere.R.id.search_src_text);
searchText.setTextColor(Color.BLACK);

Saya menggunakan Perpustakaan Holoeverywhere. Catat org.holoeverywhere.R.id.search_src_text

Jimmy Ilenloa
sumber
0

Saya menemukan solusi dari posting blog. Lihat disini .

Pada dasarnya Anda memberi gaya searchViewAutoCompleteTextView dan meminta android: actionBarWidgetTheme mewarisi gaya tersebut.

Leafartist
sumber
0

itu bekerja dengan saya

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem searchItem = menu.findItem(R.id.action_search);
    EditText searchEditText = (EditText) searchView.getActionView().findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchEditText.setTextColor(getResources().getColor(R.color.white));
    searchEditText.setHintTextColor(getResources().getColor(R.color.white));
    return super.onPrepareOptionsMenu(menu);
}
Hamza Awwad
sumber
0

Apa yang berhasil untuk saya

((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text));
Suneet Srivastava
sumber
0

Untuk Bahasa Kotlin

    searchView = view.findViewById(R.id.searchView_Contacts)
    // change color
    val id = searchView.context.resources
        .getIdentifier("android:id/search_src_text", null, null)

    val textView = searchView.findViewById<View>(id) as TextView

    textView.setTextColor(Color.WHITE)
Ali Al Fayed
sumber