2012-12-22 19 views
29

Ich möchte das Mag-Symbol deaktivieren, das in der Suchansicht angezeigt wird. Irgendeine Idee, wie man es referenziert und es entfernt oder es durch ein anderes ziehbares ersetzt?Android SearchView Icon

enter image description here

+3

Wonders warum sollte jemand nach unten auf die Frage abstimmen? –

+0

Was ist mit der weißen Linie unter dem SearchView-Symbol - wie wird es angepasst? – AndrewS

+0

Haben Sie das jemals herausgefunden? – theblang

Antwort

6

In Ihrem Thema:

<style name="Theme" parent="Your parent theme"> 
<item name="android:searchViewSearchIcon">@android:drawable/ic_search</item> 
</style> 

Edit:
searchViewSearchIcon ist ein privates Attribut. Diese Antwort funktioniert daher nicht (auf der nativen ActionBar).

+3

Setzen Sie es auf '@android: Farbe/transparent', um es zu entfernen, oder ändern Sie es, was Sie möchten. –

+0

@Mattias vielen Dank: D –

+0

gibt es eine Liste von dem, was Sie wo ändern können? –

14

Da der Wortlaut der Frage keine Erwähnung von ActionBarSherlock enthält (mit Ausnahme des Tags) und Kommentare hinzugefügt wurden, dass die akzeptierte Antwort nicht für die Standard- und/oder Unterstützungsbibliotheks-Aktionsleiste funktioniert, schreibe ich eine andere Antworten. Hier ist die Java-Code für onCreate:

// obtain action bar 
ActionBar actionBar = getSupportActionBar(); 

// find SearchView (im my case it's in a custom layout because of left alignment) 
View v = actionBar.getCustomView(); 
SearchView searchView = (SearchView)v.findViewById(R.id.search_view); 
ImageView icon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); 

// method 1: does not work persistently, because the next line 
// should be probably called after every manipulation with SearchView 
// icon.setVisibility(View.GONE); 

// method 2: working code 
icon.setAdjustViewBounds(true); 
icon.setMaxWidth(0); 
icon.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
icon.setImageDrawable(null); 

Nach dieser post, während eine SearchView von der Support-Bibliothek (android-support-v7-appcompat in meinem Fall) mit setIconifiedByDefault(false) das Symbol außerhalb bearbeiten Textbox angezeigt (SearchAutoComplete). Ansonsten (setIconifiedByDefault(true)) wird es in der Box angezeigt. Der vorgestellte Code wird standardmäßig für deaktivierte "Iconification" verwendet und erfordert möglicherweise einige Änderungen, um mit der "iconified" -Suchansicht zu arbeiten. Ich weiß nicht, ob das gleiche für ActionBarSherlock gilt.

Hoffe das hilft.

+0

i AppCompat Suche bin mit, und ich habe das Symbol innerhalb Textbox bearbeiten und i kann es nicht wegbringen. Hast du noch andere Ideen? – AndrewS

+0

Sie sollten wahrscheinlich überprüfen, welche Version Ihre Bibliothek ist und schauen Sie sich deren Quellen an, speziell in der Layoutdatei. Wenn Sie sich beispielsweise [diese Android-Quellen] ansehen (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/frameworks/base/core /res/res/layout/search_view.xml) Sie werden feststellen, dass 'search_mag_icon' außerhalb von' search_plate' liegt. Mit der Quelle können Sie ableiten, welche Elemente in Ihrem Layout zu "finden" sind. – Stan

+0

Ich habe die letzte Version von SupportLibrary und in den Ressourcen search_mag_icon ist überall draußen. Vielleicht ist dieses Symbol nicht search_mag_icon, aber einige Symbole in SearchAutoComplete? Wie kann ich Ressourcen dafür finden? – AndrewS

1

Wenn Sie die Compatibilitätsbibliothek der App v7 verwenden, können Sie dies einfach im Design ändern. In Ihrem Thema, das von einem AppCompat Thema erstreckt sich nur eine Zeile hinzufügen:

<item name="searchViewSearchIcon">@drawable/ic_search</item> 
7

Dieses Symbol ist Hinweis. Sie können also einfach einen neuen Hinweistext setzen.

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId); 

    searchPlate.setHint("Search"); 

Wenn Sie Symbol als Hinweistext spanable String mit ImageSpan verwenden

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId); 


    searchPlate.setTextColor(getResources().getColor(R.color.search_text_color)); 
    SpannableString string = new SpannableString(" "); 
    Drawable d = getResources().getDrawable(R.drawable.ic_search); 
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM); 
    string.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
    searchPlate.setHint(string); 
2

den Hinweis Suchtaste zu entfernen:

mNearMeSearchBar = (SearchView) mView.findViewById(R.id.nearme_search_component_nearme_edittext); 
mNearMeSearchBar.setIconifiedByDefault(false); //Removes Search Hint Icon 

Um die Suchtaste ziehbar zu ändern:

int searchImgId = getResources().getIdentifier("android:id/search_mag_icon", null, null); 
ImageView v = (ImageView) mNearMeSearchBar.findViewById(searchImgId); 
v.setImageResource(R.drawable.ic_compass); 
1

Diese Linien remo ved die Lupe:

//remove search icon 
    mSearchView.setIconifiedByDefault(false); 
    ImageView icon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); 
    icon.setVisibility(View.GONE); 
2

Sie haben diese Zeile in Ihrer MenuItem hinzufügen android:iconifiedByDefault="@android:color/transparent"

<item 
    android:id="@+id/activity_home_action_search" 
    android:icon="@drawable/ic_action_search" 
    android:title="@string/activity_home_search_title" 
    android:iconifiedByDefault="@android:color/transparent" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="always|collapseActionView" /> 

Oder Sie können programmatisch searchView.setIconifiedByDefault(true);

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    getMenuInflater().inflate(R.menu.home, menu); 

    MenuItem searchMenuItem = menu.findItem(R.id.activity_home_action_search); 

    SearchView searchView = (SearchView) searchMenuItem.getActionView(); 
    searchView.setIconifiedByDefault(true); 
} 
2

Sie die SearchView Stil anpassen müssen machen wie dies:

<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"> 
    <!-- Search button icon --> 
    <item name="searchIcon">@drawable/ic_arrow_back</item> 
</style> 

Und dann fügen Sie es in Ihrem AppTheme.

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- your other colors and styles --> 
    <item name="searchViewStyle">@style/MySearchViewStyle</item> 
</style> 

und wenden sie den Tag zu Ihrem Suchansicht mit style:

<android.support.v7.widget.SearchView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/searchView" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      app:queryHint="@string/search_hint" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      style="@style/MySearchViewStyle" 
      app:iconifiedByDefault="false" /> 

Hoffe, es hilft!

0

In Ihrem Thema Stil sind dies:

<style name="YourTheme.Toolbar"> 
    <item name="searchViewStyle">@style/YourActionBarSearch</item> 
    <item name="editTextColor">@color/your_ab_text_color</item> 
    <item name="android:textColorHint">@color/your_ab_hint_color</item> 
</style> 

Sie jetzt den Stil der Suche mit searchViewStyle definieren können, und editTextColor die Farbe des Textes in das Suchfeld ein. Mit der Einstellung android:textColorHint legen Sie auch die Farbe des Hinweises fest, z. "Suche...".

<style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView"> 
    <item name="searchIcon">@drawable/ic_ab_search</item> 
    <item name="queryBackground">@null</item> 
    <item name="submitBackground">@null</item> 
    <item name="searchHintIcon">@null</item> 
    <item name="defaultQueryHint">@null</item> 
    <item name="closeIcon">@drawable/ic_ab_small_search_close</item> 
</style> 

Dadurch wird Ihre Suchansicht mehr oder weniger wie gewünscht gestaltet. Das Feld searchIcon ist das Symbol in der Aktionsleiste. Das Feld searchHintIcon ist das kleine Symbol links neben dem Hinweis im Suchfeld, nach dem Sie in Ihrer Frage fragen; Setzen Sie es auf @null, um das Symbol zu entfernen. Das Feld closeIcon ist das Schließen-Symbol auf der rechten Seite des Suchfelds.

0

In xml in Suche Komponente hinzufügen nächste:

app:searchHintIcon="@null"