Bir Android Arama Görünümünde metin rengini değiştirmek mümkün müdür?


115

SearchView öğesi, metin rengini değiştirmek için herhangi bir özelliğe sahip değildir. Varsayılan metin rengi siyahtır ve koyu arka planımızda çalışmaz. Hacklere başvurmadan metnin rengini değiştirmenin bir yolu var mı?

Metin boyutunu değiştirmeyle ilgili bu benzer soruyu buldum, ancak şu ana kadar herhangi bir cevabı yok: SearchView TextSize nasıl ayarlanır?


1
Bunun için bir cevap isterim.
TheLettuceMaster

lütfen denediğinizi belirtin.
Sahil Mahajan Mj

Yanıtlar:


121

Ekle

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

ana temaya ve bu girilen metni değiştirmelidir. Ayrıca kullanabilirsiniz

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

SearchView için ipucu metnini değiştirmek için. ( @android:color/whiteKullanmayı umduğunuz uygun değerle değiştirebileceğinizi unutmayın )


1
Bu benim için sorunu çözdü ve yansıma kullanan karmaşık saçmalıklar içermiyordu. Appcompat ile de çalışır.
dj_bushido

Arama görünümünde android: theme öğesini android: editTextColor öğesine sahip bir stile de ayarlayabilirsiniz. Bu şekilde yalnızca o arama görünümünü etkilersiniz.
Pepijn

2
İşe yarıyor! Bir araç çubuğunun içinde bir arama görünümü kullanıyordum, ThemeOverlay.AppCompat.Light'ı genişlettim ve yukarıdaki öğeyi ekledim ve Araç Çubuğu widget'ında stili ayarladım;) Bir cazibe gibi çalışıyor ...
kod

Bu çözüm benim için çalışmıyor. Metnin rengi hala yanlış. Aşağıdaki yanıt, programlı olarak benim için çalıştı ipucu rengini ayarlayarak.
Dominik

4
Bu cevabın sorunu, e-postalarınızın metin rengini de değiştirecek olmasıdır EditText. SearchViewTek başına metin rengini değiştiren benim için işe yarayan tek çözüm burada: stackoverflow.com/a/40550067/1617737
ban-geoengineering

96

Şunun gibi bir şey deneyin: sdk'den metin görünümüne bir tutamaç alırsınız ve sonra onu herkese açık olarak ifşa etmedikleri için değiştirirsiniz.

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

Zarif çözümleri seviyorum
Mohsen Afshin

29
Bu her zaman boş döndürür
danielrvt-sgb

ActionBarSherlock kullanıyorsanız, görünüm kimliklerinin farklı olacağını unutmayın. Örneğin, kitaplık şu anda düzenleme metin kimliğini "package: id / abs__search_src_text" olarak ayarlıyor, bu da doğrudan R.id.abs__search_src_text aracılığıyla erişilebilir.
greg7gkb

3
Ayrıca, aslında değiştirmek istediğim şey, textView.setHintTextColor () aracılığıyla kolayca yapılan SearchView ipucu metin rengiydi.
greg7gkb

3
Bu çok kirli bir hack. EditTextColor ve android: Kullanım android textColorHint yerine akdotcom önerilen gibi
Philipp Hofmann

69

Bu benim için çalışıyor.

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

1
Bu, görünümü bir TextView olarak veya hatta bir AutoCompleteTextView olarak elde ederseniz de çalışır.
Juan José Melero Gómez

Evet, bu benim için çalışıyor @ JuanJoséMeleroGómez
Parth Patel

Sanırım bu, buradaki cevabımdan kopyalandı ve kısaltıldı: stackoverflow.com/a/26251197/2914140 .
CoolMind

24

Ben de benzer bir şey yapmak istedim. Sonunda çocuklar TextViewarasında bulmam SearchViewgerekti:

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

Util yöntemini istiyorsanız:

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

3
Ben de önceki çözümlerde boş istisna alıyordum ve bu benim için çalıştı!
Diego Ponciano

1
Bu, kabul edilen cevap olarak işaretlenmelidir. Yukarıdakiler boş verir. İyi iş arkadaşınız için teşekkürler :)
blueware

3
Bu çözüm çok iğrenç ama gerçekten işe yarayan tek çözüm ve suçlu Android ekibi!
Ofek Ron

Bununla arama simgesine nasıl erişebiliriz?
Yasin Yaqoobi

17

@CzarMatt sayesinde AndroidX desteği ekledim .

Benim için şu işler. Bir bağlantıdan bir kod kullandım: Destek kitaplığını kullanarak eylem çubuğundaki arama ipucunun metin rengini değiştirin .

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

Eylem çubuğu arama görünümü ipucu metni rengini değiştirmek başka bir çözüm önerir . Çalışır, ancak yalnızca ipucu metnini ve rengini ayarlar.

    searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));

1
Kullan androidx.appcompat.R.id.search_src_textEğer AndroidX için projenizi göç ettik eğer.
CzarMatt

16

Bu en iyi şekilde özel stillerle elde edilir. Eylem çubuğu widget stilini kendi özel stilinizle aşırı yükleyin. Koyu işlem çubuğuna sahip sanal ışık için, bunu kendi stiller dosyanıza koyun, örneğin 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>

Uygulamanızın, buraya bağlantı açıklamasını girin bölümünde açıklandığı gibi tema özel temasını kullandığından emin olun


14

Stildeki editTextColorniteliği ayarlayarak bunu yapabilirsiniz .

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

ve bu stili mizanpaja Toolbarveya SearchViewmizanpaja uygularsınız .

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

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

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

+1 Bu, findViewById imho ile ilgili tüm çözümlerden üstündür. Mümkün olduğunda görünüm stili kullanılmalıdır.
Mattias

Kabul edilen cevap bu olmalı! Çok temiz ve kolay.
MSeiz5

8

kullanıyorsanız - 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);

Kotlin'de

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

Şimdi androidx destek kitaplıklarını kullanmaya başlamalısınız


7

Sizin için bir Stil oluşturun Toolbar

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

Ve bunu, Toolbar

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

6

Android.support.v7.widget.SearchView kullanıyorsanız, yansıma kullanmak zorunda kalmadan mümkündür.

Bunu uygulamamda şu şekilde yapıyorum:

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

Kimlikleri uygulama uyumlu olmayan SearchView için herkese açık olarak ifşa etmezler, ancak nereye bakacağınızı biliyorsanız AppCompat için yaparlar. :)


Bu aslında çeşitli cihazlarda oldukça iyi çalışıyor. Güzel bir.
Shark

5

Bu sorunu yaşadım ve bu benim için çalışıyor.

@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;
}

4
Her zaman null alırım: (TextView) searchView.findViewById (id);
danielrvt-sgb

4

Uygulama temanızı holo temasına dayandırırsanız, SearchView'unuzda siyah metin yerine beyaz bir metin alırsınız.

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

Kirli hackler kullanmadan arama görünümünün metin rengini değiştirmenin başka bir yolunu bulamadım.


1
Bu işe yaramadı. El ile "sihirli" bir görünüm kimliği aramaktan çok daha temiz olduğundan, umuyordum. Düzeni koyu bir arka plana sahip bir etkinlikle birkaç tema denedim, ancak hiçbiri SearchView'de siyah metinden başka bir şey üretmedi.
E-Riz

4

En temiz yol şudur:

Araç Çubuğu ThemeOverlay.AppCompat.Dark.Actionbar temasını kullanır.

Şimdi şunun gibi çocuk yap:

toolbarStyle parent "ThemeOverlay.AppCompat.Dark.Actionbar"

bu öğeyi o stilde ekle

öğe adı "android: editTextColor"> renginiz

Bitti.

Çok önemli bir şey de araç çubuğuna layout_height = "? Attr / actionbarSize" koymanızdır. Varsayılan olarak wrap_content şeklindedir.Benim için metin arama görünümünde görünmüyordu ve bu sorunu çözdü.


4

Evet, aşağıdaki yöntemi kullanarak mümkündür.

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

Bu yöntemin çağrılması şuna benzer ..

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

Bunu kullanarak, bu yöntemi kullanarak ipucu olarak kırmızı renk * işaretini başarıyla ekledim. Bu yöntemi ihtiyacınıza göre değiştirmelisiniz. Umarım size yardımcı olur .... :)


benim için biraz karmaşık.
gaols

1
String text = "<font color = # 8c8c8c>" + HintMessage + "</font>"; argEditText.setHint (Html.fromHtml (metin)); renk ipucunu ayarlamak için yalnızca bu iki satır kodunu da kullanabilirsiniz
DynamicMind

1
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); bu benim çözümüm, ama bence sizinki benimkinden daha iyi, çözümünüzü kullanacağım, teşekkür ederim.
gaols

@gaols çözümün var mı ..?
DynamicMind

@ gaols, "com.android.internal.R.id.search_src_text" nerede?
wangqi060934

3

Bunu kullan, doğru. : D

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

3

Evet yapabiliriz,

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

SerachView Metnine beyaz rengi uygulamak için,

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

Mutlu kodlamalar !!!!


3

bu benim için çalışıyor.

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

3

Yazılan metnin rengini değiştirin:

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

İpucu metninin rengini değiştirin:

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

2
TextView textView = (TextView) searchView.findViewById(R.id.search_src_text);
textView.setTextColor(Color.BLACK);

1

Bir SearchViewnesne uzanır LinearLayout, bu nedenle diğer görünümleri tutar. İşin püf noktası, ipucu metnini tutan görünümü bulmak ve rengi programlı olarak değiştirmektir. Görünümü kimliğe göre bulmaya çalışmanın sorunu, kimliğin uygulamada kullanılan temaya bağlı olmasıdır. Dolayısıyla kullanılan temaya bağlı olarak findViewById(int id)yöntem geri dönebilir null. Her temayla çalışan daha iyi bir yaklaşım, görünüm hiyerarşisinde gezinmek ve ipucu metnini içeren widget'ı bulmaktır:

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

Bu yöntemi kullanarak , arama sorgusunu tutma SearchViewgibi hiyerarşideki diğer widget'ların görünümünü de değiştirebilirsiniz EditText. Google SearchViewkısa bir süre içinde görünüm hiyerarşisini değiştirmeye karar vermedikçe, bu yöntemle bir süre widget'ın görünümünü değiştirebilmelisiniz.


1

Appcompat v7 kitaplığını kullanarak arama görünümünü özelleştirmek mümkündür. Appcompat v7 kitaplığı kullandım ve bunun için özel stil tanımladım. Çekilebilir klasörde, aşağıdaki gibi görünen bottom_border.xml dosyasını koyun:

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

Styles_myactionbartheme.xml değerler klasöründe:

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

Menüyü görüntülemek için custommenu.xml dosyasını tanımladım:

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

Aktiviteniz, Activity yerine ActionBarActivity'yi genişletmelidir. İşte onCreateOptionsMenu yöntemi.

  @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);
  }

Manifest dosyasında:

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

Daha fazla bilgi için bu url'ye bakın:
Burada http://www.jayway.com/2014/06/02/android-theming-the-actionbar/


1

searchView ile appcompat-v7 Araç Çubuğu için (MenuItemCompat aracılığıyla sağlanır):

Araç Çubuğu temasının @ style / ThemeOverlay.AppCompat.Light olarak ayarlanması, ipucu metni ve girilen metin için koyu renk (siyah) verir, ancak imleç * rengini etkilemez. Buna göre, Araç Çubuğu temasının @ style / ThemeOverlay.AppCompat.Dark olarak ayarlanması, ipucu metni ve girilen metin için açık renk (beyaz) verir, imleç * yine de beyaz olur.

Yukarıdaki temaları özelleştirme:

android: textColorPrimary -> girilen metnin rengi

editTextColor -> girilen metnin rengi (eğer ayarlanmışsa android: textColorPrimary etkisini geçersiz kılar)

android: textColorHint -> ipucunun rengi

* not: İmleç renginin nasıl kontrol edilebileceğini henüz belirlemedim (yansıtma çözümünü kullanmadan).


İmleç rengi colorControlActivated öğesinden gelir
Henry

1

Bunu kullanarak, arama görünümünde yazılan renk metnini değiştirebildim

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

1

Vay. Çok cevap. Renk değerini birincil renginizden alır.

Değiştirin ve bitti!

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

stiller;

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

1

androidx ile araç çubuğundaki searchView stilini değiştirin.

ilk olarak, araç çubuğu Tarzınızda arama görünümü stilini ayarlayın (bunları kendi uygulamanıza dayalı olarak değiştirin):

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

ardından, bunu araç çubuğu düzeninizde kullanın:

android:theme="@style/ToolbarStyle"

bununla, sorgu ipucu dışındaki çoğu searchView stilini değiştirebilirsiniz.

son olarak araç çubuğu menünüzün seçeneklerinde sorgu ipucunu ayarlayın:

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

"SearchView stili" altında bir şey mi göndermek istediniz?
DavidW

Çözümümü tamamladım ve basitleştirdim, belki size yardımcı olabilir.
user2333

1

Varsayılan rengi geçersiz kılabilirsiniz. android:themeGörünüm'deki özelliği .

Bir Toolbarveya kullanıyorsanız MaterialToolbar:

<com.google.android.material.appbar.MaterialToolbar
    android:theme="@style/ThemeOverlay.Toobar"
    ...>

veya:

<androidx.appcompat.widget.Toolbar
    android:theme="@style/ThemeOverlay.Toobar"
    ...>

Materyal Bileşenler Temasıyla birlikte Tema kaplaması :

<style name="ThemeOverlay.Toobar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- Text color -->
    <item name="android:editTextColor">@color/....</item>
    <!-- Hint text color -->
    <item name="android:textColorHint">@color/...</item>
</style>

AppCompat temasıyla:

<style name="ThemeOverlay.Toobar" parent="ThemeOverlay.AppCompat.Light.*">
    <!-- Text color -->
    <item name="android:editTextColor">@color/....</item>
    <!-- Hint text color -->
    <item name="android:textColorHint">@color/...</item>
</style>

görüntü açıklamasını buraya girin


SearchViewDüzeninizde a kullanıyorsanız, benzer bir şey yapabilirsiniz:

   <androidx.appcompat.widget.SearchView
       android:theme="@style/ThemeOverlay.SearchView"

ile

   <style name="ThemeOverlay.SearchView" parent="">
        <!-- Text color -->
        <item name="android:editTextColor">@color/...</item>
        <!-- Hint text color -->
        <item name="android:textColorHint">@color/...</item>
    </style>

görüntü açıklamasını buraya girin


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

Holoeverywhere Kitaplığı kullanıyorum. Not org.holoeverywhere.R.id.search_src_text


0

Bir blog gönderisinden bir çözüm buldum. Buraya bakın .

Temel olarak searchViewAutoCompleteTextView stilini uygularsınız ve android: actionBarWidgetTheme stilini devralır.


0

benimle çalışıyor

@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);
}

0

Benim için ne işe yaradı

((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.