2015-06-15 13 views
22

Sto utilizzando il widget di ricerca di Toolbar nel mio progetto. Tutto funziona bene, ma mi aspetto la cosa che sono completamente bloccato con la rimozione della sottolineatura sotto campo di ricerca nella mia barra degli strumenti. Ho provato molte soluzioni e niente funziona. Di seguito sono elencate alcune delle soluzioni che ho provato.Come rimuovere la sottolineatura bianca in un widget SearchView in Toolbar Android

requisito è quello di rimuovere sottolineatura bianco nell'immagine

enter image description here

Ist Soluzione:

//Removing underline 

    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 
    View searchPlate = searchView.findViewById(searchPlateId); 
    if (searchPlate!=null) { 
     searchPlate.setBackgroundColor (Color.TRANSPARENT); 
     int searchTextId = searchPlate.getContext().getResources().getIdentifier ("android:id/search_src_text", null, null); 

    } 

II ° Soluzione:

EditText searchEdit = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)); 
searchEdit.setBackgroundColor(Color.TRANSPARENT); 

Il codice sopra riportato funziona per modificare lo sfondo di EditText, ma la sottolineatura viene visualizzata sotto l'icona di chiusura in SearchBar.

completo del codice che sto usando per widget di SearchBar come segue:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater infl) { 
     super.onCreateOptionsMenu(menu, infl); 
     MenuInflater inflater = getActivity().getMenuInflater(); 
     inflater.inflate(R.menu.action_search, menu); 
     final SearchView searchView = (SearchView) MenuItemCompat 
       .getActionView(menu.findItem(R.id.search)); 

     SearchManager searchManager = (SearchManager) getActivity().getSystemService (getActivity().SEARCH_SERVICE); 
     searchView.setSearchableInfo (searchManager.getSearchableInfo (getActivity().getComponentName())); 

     //changing edittext color 
     EditText searchEdit = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)); 
     searchEdit.setTextColor(Color.WHITE); 
} 

action_search.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:compat="http://schemas.android.com/apk/res-auto"> 
    <item android:id="@+id/search" 
     android:title="Search" 
     android:icon="@drawable/abc_ic_search_api_mtrl_alpha" 
     compat:showAsAction="ifRoom|collapseActionView" 
     compat:actionViewClass="android.support.v7.widget.SearchView" /> 
</menu> 

possibile duplicato di this

Grazie in anticipo, qualsiasi tipo di soluzioni e suggerimenti essere molto utile per me

+1

tenta di impostare queste due proprietà in Android File xml: submitBackground = "@ Android: colore/trasparente" android: queryBackground = "@ Android: colore/trasparente" – Abhishek

+0

Condivide la linea sottile rendono automaticamente per voi? Sto lottando per aggiungere una linea! – user1841702

risposta

30

Una volta provate come segue

View v = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate); 
v.setBackgroundColor(Color.parseColor("here give actionbar color code")); 

auguriamo che questo ti aiuta.

+0

Grazie! esattamente quello che stavo cercando. – Chandru

+0

cosa fai quando searchView ha un pulsante Voice? Ho provato a usare lo stesso trucco con l'ID 'search_voice_btn' ma non funziona – herau

+0

Grazie mille. Nel mio caso ho impostato il Background drawable su null ie _searchView.findViewById (android.support.v7.appcompat.R.id.search_plate) setBackground (null) _ –

26

Oppure si può fare questo attraverso stili:

<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView"> 
    <item name="submitBackground">@color/primaryColor</item> 
    <item name="queryBackground">@color/primaryColor</item> 
</style> 

queryBackground è attributo per lo sfondo query. Se supporti la ricerca vocale, potresti voler rimuovere la linea anche sotto il pulsante del microfono. Questo è l'attributo submitBackground.

Quindi, naturalmente, applica lo stile al tuo tema.

<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen"> 
    <item name="searchViewStyle">@style/SearchViewMy</item> 
</style> 
+4

Questa è la migliore risposta in quanto non formula supposizioni sull'implementazione della gerarchia delle viste della libreria di supporto, che può cambiare senza preavviso. – TheIT

+1

Davvero una risposta migliore! Preferisci questo prima di provare qualsiasi altra soluzione. – Shruti

-3

Di seguito ha risolto il problema perfettamente per me:

android:background="@android:color/transparent" 
+0

impostazione sfondo trasparente non funziona in caso di vista di ricerca – Abhishek

28

Se si utilizza SearchView quindi utilizzare per API sotto 21

android:queryBackground="@android:color/transparent" 

è possibile utilizzare sotto il codice se si utilizza API 21 o più

app:queryBackground="@android:color/transparent" 
+0

FYI, questa proprietà è disponibile da Api dal 21 ° in poi. –

+2

try app: queryBackground = "@ android: color/transparent" =) –

+0

app: queryBackground = "@ android: color/transparent" funziona correttamente su Api Level 21 anziché Android: queryBackground = "@ android: color/transparent" – Nikhil

0

Il codice per cambiare il colore di sfondo SearchView modificare il testo è al di sotto

public static void setSearchViewEditTextBackgroundColor(Context context, SearchView searchView, int backgroundColor){ 
    int searchPlateId = context.getResources().getIdentifier("android:id/search_plate", null, null); 
    ViewGroup viewGroup = (ViewGroup) searchView.findViewById(searchPlateId); 
    viewGroup.setBackgroundColor(ComponentUtils.getColor(context, backgroundColor)); 
} 

Se il colore di azione barra di sfondo è bianco quindi chiamare il metodo di cui sopra come segue.

setSearchViewEditTextBackgroundColor(this, searchView, R.color.white); 

Ora la sottolineatura dal testo di modifica di SearchView scomparirà.

3

Si può provare a utilizzare il codice seguente, funziona come un fascino per me.

View v = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate); 
    v.setBackgroundColor(ContextCompat.getColor(context,android.R.color.transparent)); 
Problemi correlati