क्या Android SearchView पर टेक्स्टकॉल बदलना संभव है?


115

टेक्स्ट रंग बदलने के लिए SearchView तत्व में कोई गुण नहीं है। डिफ़ॉल्ट टेक्स्ट का रंग काला है और यह हमारी डार्क बैकग्राउंड पर काम नहीं करता है। क्या हैक्स का सहारा लिए बिना पाठ का रंग बदलने का कोई तरीका है?

मुझे पाठ आकार बदलने से संबंधित यह समान प्रश्न मिला, लेकिन अभी तक, इसका कोई जवाब नहीं है: SearchView TextSize कैसे सेट करें?


1
मुझे इसके लिए एक जवाब पसंद आएगा।
TheLettuceMaster

कृपया उल्लेख करें कि आपने क्या प्रयास किया है।
साहिल महाजन MJ

जवाबों:


121

जोड़ना

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

मूल विषय के लिए और जो दर्ज किए गए पाठ को बदलना चाहिए। आप भी उपयोग कर सकते हैं

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

खोज के लिए संकेत पाठ को बदलने के लिए। (ध्यान दें कि आप जिस @android:color/whiteभी उचित मूल्य का उपयोग करने की उम्मीद कर रहे हैं , उसे बदल सकते हैं)


1
यह मेरे लिए तय है, और प्रतिबिंब का उपयोग कर किसी भी जटिल shenanigans शामिल नहीं था। Appcompat के साथ भी काम करता है।
dj_bushido

आप एंड्रॉइड: थीम को स्टाइल के लिए खोज पर सेट कर सकते हैं जिसमें एंड्रॉइड है: editTextColor तत्व। इस तरह आप केवल उस खोज को प्रभावित करते हैं।
पेपिजन

2
यह काम करता हैं! मैं एक टूलबार के अंदर खोज दृश्य का उपयोग कर रहा था, ThemeOverlay.AppCompat.Light को बढ़ाया और उपरोक्त आइटम को जोड़ा और टूलबार विजेट पर शैली सेट की;) एक आकर्षण की तरह काम करता है ...
codename_47

यह समाधान मेरे लिए काम नहीं करता है। पाठ में अभी भी गलत रंग है। संकेत रंग निर्धारित करने के साथ नीचे दिए गए उत्तर ने मेरे लिए काम किया।
डोमिनिक

4
इस उत्तर के साथ समस्या यह है कि यह आपके EditTextएस के पाठ का रंग भी बदल देगा । एकमात्र समाधान जिसने मेरे लिए काम किया है, जो SearchViewअकेले पाठ का रंग बदल देता है: stackoverflow.com/a/40550067/1617737
प्रतिबंध-जियोइंजीनियरिंग

96

कुछ इस तरह की कोशिश करें: आपको sdk से टेक्स्टव्यू के लिए एक हैंडल मिलेगा और फिर इसे बदल दें क्योंकि वे इसे सार्वजनिक रूप से उजागर नहीं करते हैं।

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

मुझे सुरुचिपूर्ण समाधान पसंद हैं
मोहसिन अफशीन

29
यह
मार्ग

ध्यान दें कि यदि आप ActionBarSherlock का उपयोग कर रहे हैं तो व्यू आईडी अलग-अलग होंगे। उदाहरण के लिए, लिब वर्तमान में एडिट टेक्स्ट आईडी को "पैकेज: आईडी / abs__search_src_text" पर सेट करता है, जिसे सीधे R.id.abs__search_src_text के माध्यम से एक्सेस किया जा सकता है।
greg7gkb

3
इसके अलावा, जो मैं वास्तव में बदलना चाहता था वह SearchView hint टेक्स्ट कलर था, जो textView.setHintTextColor () के माध्यम से आसानी से किया जाता है।
greg7gkb

3
यह बहुत गंदा हैक है। Android का उपयोग करें: editTextColor और android: textColorHint के बजाय akdotcom का सुझाव दिया गया है
Philipp Hofmann

69

यह मेरे लिए काम करता है।

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
यह तब भी काम करता है जब आप एक टेक्स्ट दृश्य के रूप में या एक AutoCompleteTextView के रूप में दृश्य प्राप्त करते हैं।
जुआन जोस मेलेरो गोमेज़

हां, @ JuanJoséMeleroGómez
पार्थ पटेल

मुझे लगता है, यह कॉपी किया गया था और मेरे जवाब से छोटा किया गया था: stackoverflow.com/a/26251197/2914140
कूलमाइंड

24

मैं भी कुछ ऐसा ही करना चाहता था। मैं अंत में पता लगाने के लिए किया था TextViewके बीच SearchViewबच्चों:

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

यदि आप उपयोग विधि चाहते हैं:

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
मैं भी पिछले समाधान के साथ अशक्त अपवाद हो रहा था, और यह मेरे लिए काम किया!
डिएगो पोंसियानो

1
इसे स्वीकृत उत्तर के रूप में चिह्नित किया जाना चाहिए। ऊपर वाला अशक्त देता है। अच्छे काम के लिए धन्यवाद दोस्त :)
blueware

3
यह समाधान बहुत ही घृणित है, लेकिन इसका एकमात्र ऐसा है जो वास्तव में काम करता है और यह दोष देने के लिए एंड्रॉइड टीम है!
टोक रॉन

हम इसके साथ खोज आइकन कैसे एक्सेस करेंगे?
यासीन याकोबी

17

@CzarMatt की बदौलत मैंने AndroidX जोड़ा समर्थन ।

मेरे लिए निम्नलिखित कार्य हैं। मैंने एक लिंक से एक कोड का उपयोग किया: समर्थन लाइब्रेरी का उपयोग करके एक्शनबार में खोज संकेत का टेक्स्ट रंग बदलें

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

एक्शन बार सर्चव्यू संकेत पाठ का रंग बदलना एक और समाधान की सलाह देता है। यह काम करता है लेकिन केवल संकेत पाठ और रंग सेट करता है।

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

1
androidx.appcompat.R.id.search_src_textयदि आपने अपना प्रोजेक्ट AndroidX पर माइग्रेट कर लिया है, तो उसका उपयोग करें ।
CzarMatt

16

यह कस्टम शैलियों के माध्यम से सबसे अच्छा प्राप्त किया जाता है। अपनी स्वयं की कस्टम शैली के साथ एक्शन बार विजेट शैली को अधिभारित करें। डार्क एक्शन बार के साथ होलो लाइट के लिए, इसे अपनी खुद की स्टाइल फाइल में रखें जैसे 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>

सुनिश्चित करें कि आपका एप्लिकेशन थीम कस्टम थीम का उपयोग कर रहा है जैसा कि यहां दर्ज लिंक विवरण में वर्णित है


14

आप editTextColorशैली में विशेषता सेट करके ऐसा कर सकते हैं ।

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

और आप इस शैली को Toolbarया SearchViewलेआउट में लागू करते हैं ।

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

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

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

+1 यह सभी समाधान दिखाता है जिसमें findViewById imho शामिल है। जब भी संभव हो दृश्य स्टाइल का उपयोग किया जाना चाहिए।
मटियास

यह स्वीकृत उत्तर होना चाहिए! बहुत साफ और आसान।
MSeiz5

8

अगर आप उपयोग करते हैं - 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);

कोटलिन में

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

आपको अब androidx समर्थन पुस्तकालयों का उपयोग करना शुरू करना चाहिए


7

अपने लिए एक स्टाइल बनाएं Toolbar

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

और इसे थीम के रूप में सेट करें Toolbar

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

6

यदि आप android.support.v7.widget.SearchView का उपयोग कर रहे हैं, तो प्रतिबिंब का उपयोग किए बिना संभव है।

यहां बताया गया है कि मैं इसे अपने ऐप में कैसे कर रहा हूं:

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

वे गैर अप्पोमैट सर्चव्यू के लिए आईडी को सार्वजनिक रूप से उजागर नहीं करते हैं, लेकिन यदि आप जानते हैं कि कहां देखना है तो वे एपकॉम के लिए करते हैं। :)


यह वास्तव में विभिन्न उपकरणों पर बहुत अच्छा काम करता है। अच्छा है।
शार्क

5

मुझे यह समस्या थी, और यह मेरे लिए काम करता है।

@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
मुझे सभी रास्ते मिलते हैं: (पाठ दृश्य) searchView.findViewById (आईडी);
danielrvt-sgb

4

यदि आप होलो थीम पर अपनी ऐप थीम को आधार बनाते हैं, तो आपको अपने खोज दृश्य में काले पाठ के बजाय एक सफेद रंग मिलेगा

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

मुझे गंदे हैक का उपयोग किए बिना खोज के टेक्स्टकोलर को बदलने का कोई अन्य तरीका नहीं मिला।


1
यह काम नहीं किया। मैं यह उम्मीद कर रहा था, क्योंकि यह "मैजिक" व्यू आईडी के लिए मैन्युअल रूप से खोज करने की तुलना में बहुत क्लीनर है। मैंने कई विषयों की कोशिश की, एक ऐसी गतिविधि के साथ जिसका लेआउट एक अंधेरे पृष्ठभूमि है, लेकिन उनमें से किसी ने भी सर्च व्यू में काले पाठ के अलावा कुछ भी नहीं बनाया है।
ई-रिज़

4

सबसे साफ तरीका है:

टूलबार थीम ThemeOverlay.AppCompat.Dark.Actionbar का उपयोग करता है।

अब इसे बच्चे की तरह बनाएं:

टूलबार स्टाइल अभिभावक "ThemeOverlay.AppCompat.Dark.Actionbar"

इस आइटम को उस शैली में जोड़ें

आइटम का नाम "android: editTextColor"> yourcolor

किया हुआ।

एक और बहुत महत्वपूर्ण बात यह है कि टूलबार में लेआउट_हाइट = "डालें? Attr / actionbarSize"। डिफ़ॉल्ट रूप से यह wra_content है। मेरे लिए खोज में वह पाठ भी दिखाई नहीं दे रहा था जिससे यह समस्या ठीक हो गई।


4

हाँ, यह निम्नलिखित विधि का उपयोग करके संभव है।

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

इस विधि की पुकार ऐसी लगती है ।।

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

इसका उपयोग करते हुए मैंने सफलतापूर्वक इस विधि का उपयोग करते हुए संकेत में लाल रंग * निशान जोड़ दिया है। आपको अपनी आवश्यकता के अनुसार इस विधि को बदलना चाहिए। मुझे आशा है कि यह आपके लिए उपयोगी है .... :)


यह कुछ हद तक मेरे लिए जटिल है।
गाओलेंस

1
स्ट्रिंग का पाठ = "<font color = # 8c8c8c>" + HintMessage + "</ font>"; argEditText.setHint (Html.fromHtml (पाठ)); आप कलर हिंट सेट करने के लिए केवल इन दो लाइन कोड का उपयोग कर सकते हैं
डायनामिकइंड

1
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); यह मेरा समाधान है, लेकिन मुझे लगता है कि तुम्हारा मेरा से बेहतर है, मैं तुम्हारे समाधान का उपयोग करूँगा, धन्यवाद।
गॉल्स

@gaols आप समाधान मिल गया है ..?
डायनामिकमाइंड

@ Gaols, आपका "com.android.internal.R.id.search_src_text" कहाँ है?
वांग्कि ०६०

3

यह एक का उपयोग करें, यह सही है। : डी

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

3

हाँ हम कर सकते हैं,

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

SerachView पाठ के लिए सफेद रंग लागू करने के लिए,

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

हैप्पी कोडिंग !!!!


3

यह मेरे लिए काम कर रहा है।

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

टाइप किए गए पाठ का रंग बदलें:

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

संकेत पाठ का रंग बदलें:

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

एक SearchViewवस्तु का विस्तार होता है LinearLayout, इसलिए यह अन्य विचार रखती है। ट्रिक यह है कि हिंट टेक्स्ट को होल्ड करते हुए देखें और कलर प्रोग्राम को बदल दें। आईडी द्वारा दृश्य को खोजने की कोशिश के साथ समस्या यह है कि आईडी आवेदन में प्रयुक्त विषय से निर्भर है। इसलिए प्रयुक्त विषय के आधार पर, findViewById(int id)विधि वापस आ सकती है null। एक बेहतर तरीका जो हर विषय के साथ काम करता है, वह है पदानुक्रम को देखने और संकेत को खोजने के लिए जिसमें पाठ शामिल है:

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

इस पद्धति का उपयोग करके, आप SearchViewपदानुक्रम में अन्य विजेट के रूप को भी बदल सकते हैं , जैसे EditTextकि खोज क्वेरी को पकड़ना। जब तक Google दृश्य पदानुक्रम को SearchViewशीघ्र ही बदलने का निर्णय नहीं लेता है, तब तक आपको कुछ समय के लिए इस पद्धति के साथ विजेट की उपस्थिति को बदलने में सक्षम होना चाहिए।


1

Appcompat v7 पुस्तकालय का उपयोग करके खोज को अनुकूलित करना संभव है। मैंने इसके लिए appcompat v7 पुस्तकालय और परिभाषित कस्टम शैली का उपयोग किया है। ड्रॉ करने योग्य फ़ोल्डर में नीचे की तरफ_border.xml फ़ाइल डालें जो इस तरह दिखता है:

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

मानों में फ़ोल्डर style_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>

मैंने मेनू प्रदर्शित करने के लिए custommenu.xml फ़ाइल परिभाषित की:

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

आपकी गतिविधि गतिविधि के बजाय ActionBarActivity का विस्तार करना चाहिए। यहाँ 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);
  }

मेनिफ़ेस्ट फ़ाइल में:

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

अधिक जानकारी के लिए इस url को देखें:
यहाँ http://www.jayway.com/2014/06/02/android-theming-the-actionbar/


1

appcompat-v7 टूलबार सर्च व्यू के साथ (MenuItemCompat द्वारा प्रदान किया गया):

टूलबार थीम को @ स्टाइल / ThemeOverlay.AppCompat पर सेट करना। लाइट संकेत पाठ के लिए और दर्ज किए गए पाठ के लिए गहरे रंग (काला) का उत्पादन करेगा, लेकिन कर्सर * रंग को प्रभावित नहीं करेगा। तदनुसार, टूलबार थीम को @ शैली / ThemeOverlay.AppCompat.Dark पर सेट करने से संकेत पाठ और दर्ज किए गए पाठ के लिए हल्के रंग (सफेद) का उत्पादन होगा, वैसे भी कर्सर * सफेद होगा।

उपरोक्त विषयों को अनुकूलित करना:

Android: textColorPrimary -> दर्ज किए गए पाठ का रंग

editTextColor -> दर्ज किए गए पाठ का रंग (Android के प्रभाव को ओवरराइड करेगा: textColorPrimary यदि सेट है)

Android: textColorHint -> संकेत का रंग

* नोट: अभी तक यह निर्धारित करने के लिए कि कैसे कर्सर रंग को नियंत्रित किया जा सकता है (प्रतिबिंब समाधान का उपयोग किए बिना)।


कर्सर रंग colorControlActivated से आता है
हेनरी

1

इसका उपयोग करके मैं खोज दृश्य में टाइप किए गए रंग पाठ को बदलने में सक्षम था

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

1

वाह। बहुत सा जवाब। यह आपके प्राथमिक रंग से रंग मूल्य प्राप्त करता है।

इसे बदलो, और इसके किया!

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

शैलियाँ;

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

1

androidx के साथ टूलबार में खोज दृश्य शैली बदलें।

सबसे पहले, अपने टूलबार स्टाइल में खोज दृश्य शैली सेट करें (माता-पिता उन्हें अपने स्वयं के ऐप बेस के साथ बदल दें):

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

फिर, इसे अपने टूलबार लेआउट में उपयोग करें:

android:theme="@style/ToolbarStyle"

इसके साथ, आप क्वेरी संकेत को छोड़कर खोज शैली की अधिकांश शैली बदल सकते हैं।

अंत में अपने टूलबार मेनू के विकल्पों पर क्वेरी संकेत सेट करें:

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 style" के तहत कुछ पोस्ट करना था?
डेविड

मैंने अपने समाधान को पूरा और सरल किया है, शायद यह आपकी मदद कर सकता है।
user2333

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

मैं होलोवेरी लाइब्रेरी का उपयोग कर रहा हूं। Org.holoeverywhere.R.id.search_src_text पर ध्यान दें


0

मुझे एक ब्लॉग पोस्ट से एक समाधान मिला। यहाँ देखें

मूल रूप से आप searchViewAutoCompleteTextView को स्टाइल करते हैं और Android: ActionBarWidgetTheme स्टाइल को इनहेरिट करते हैं।


0

यह मेरे साथ काम करता है

@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

कोटलिन भाषा के लिए

    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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.