webentwicklung-frage-antwort-db.com.de

Stylen einer SearchView in der Android Aktionsleiste

Ich habe ein Such-Widget in meiner Aktionsleiste, das so aussieht:

Search Widget in Action Bar

(1) Wie ändere ich die Farbe des Textes "iPhone"?

(2) Wenn Sie das graue X bemerken, hat das gesamte Such-Widget auch diese Farbe, wenn es sich an einer Symbolposition befindet. Ich bin auf Holo.Theme.Light und nutze meine eigenen Mods dafür.

Wie ändere ich diese beiden Stile für das Widget in meiner Datei styles.xml (vorausgesetzt, Sie nehmen dort die Änderungen für ein Such-Widget vor)?

33
KickingLettuce

Sie müssten einstellen

searchView.setBackgroundColor(Color.WHITE);

SearchViews sind nicht so anpassbar.

9
lokoko

Ich habe viel Zeit dafür aufgewendet, aber schließlich: :-)

1) So ändern Sie die Textfarbe:

((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text)).setTextColor(Color.WHITE);

2) So ändern Sie den Texthinweis:

((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(Color.WHITE);
50
Adidas

Wenn Sie appcompat library verwenden, unterscheidet sich die Lösung ein wenig von Jeromes Antwort. Hier ist meine Lösung

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main_menu, menu);
    restoreActionBar();

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setHintTextColor(Color.WHITE);
    searchAutoComplete.setTextColor(Color.WHITE);

    View searchplate = (View)searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
    searchplate.setBackgroundResource(R.drawable.texfield_searchview_holo_light);

    ImageView searchCloseIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_close_btn);
    searchCloseIcon.setImageResource(R.drawable.clear_search);

    ImageView voiceIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_voice_btn);
    voiceIcon.setImageResource(R.drawable.abc_ic_voice_search);

    ImageView searchIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);
    searchIcon.setImageResource(R.drawable.abc_ic_search);


    return super.onCreateOptionsMenu(menu);
}
15
Abdul Rahman

Sie können den Stil der Suchansicht ändern. Hier ist ein Code, mit dem ich den Edittext, das Sprachsymbol, optimiert habe ...

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_plate", null, null);
        searchView.findViewById(searchPlateId).setBackgroundResource(R.drawable.textfield_search_selected);

        int voiceSearchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/submit_area", null, null);
        searchView.findViewById(voiceSearchPlateId).setBackgroundResource(R.drawable.textfield_search_right_selected);

        // change hint color
        int searchTextViewId = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
        TextView searchTextView = (TextView) searchView.findViewById(searchTextViewId);
        searchTextView.setHintTextColor(getResources().getColor(R.color.light_grey));

[Bearbeiten] Eine vollständigere Antwort finden Sie hier: Ändern des Hintergrunds, der vom Widget für die Suchansicht gezeichnet werden kann

13
Jerome VDL

Ab Lollipop können Sie die Suchansicht wie folgt aus dem Blog-Beitrag stylen http://Android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

values/themes.xml:
<style name=”Theme.MyTheme” parent=”Theme.AppCompat”>
    <item name=”searchViewStyle”>@style/MySearchViewStyle</item>
</style>
<style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”>
    <!-- Background for the search query section (e.g. EditText) -->
    <item name="queryBackground">...</item>
    <!-- Background for the actions section (e.g. voice, submit) -->
    <item name="submitBackground">...</item>
    <!-- Close button icon -->
    <item name="closeIcon">...</item>
    <!-- Search button icon -->
    <item name="searchIcon">...</item>
    <!-- Go/commit button icon -->
    <item name="goIcon">...</item>
    <!-- Voice search button icon -->
    <item name="voiceIcon">...</item>
    <!-- Commit icon shown in the query suggestion row -->
    <item name="commitIcon">...</item>
    <!-- Layout for query suggestion rows -->
    <item name="suggestionRowLayout">...</item>
</style>
7
QAMAR
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search));
searchView.setSubmitButtonEnabled(true); // to enable submit button

ImageView b = (ImageView) searchView.findViewById(Android.support.v7.appcompat.R.id.search_go_btn);
b.setImageResource(Android.R.drawable.ic_menu_search); //to change submit button icon

TextView a=(TextView) searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
a.setTextColor(...); //to change color of search text
4
Ali Ziaee

Die Art und Weise, wie ich dies löste, war die Verwendung des Holo.Light.DarkActionBar-Themas. Ich glaube nicht, dass Sie das Such-Widget anders leicht ändern können.

3
KickingLettuce

im onCreateOptionsMenu :

int id = searchView.getContext()
                   .getResources()
                   .getIdentifier("Android:id/search_src_text", null, null);
    TextView textView = (TextView) searchView.findViewById(id);
    textView.setTextColor(Color.WHITE);
2
Mina Gabriel
@Override
    public boolean onCreateOptionsMenu(Menu menu) {

        super.onCreateOptionsMenu(menu);

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);

        // Associate search configuration with the SearchView
        SearchManager searchManager =
               (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setQueryHint("Client/DOB/PPSN");
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

        // Setting the textview default behaviour properties
        int id = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
        TextView textView = (TextView) searchView.findViewById(id);
        textView.setTextColor(Color.WHITE);
        textView.setHintTextColor(Color.WHITE);

        // Set the search plate color to white
        int linlayId = getResources().getIdentifier("Android:id/search_plate", null, null);
        View view = searchView.findViewById(linlayId);
        Drawable drawColor = getResources().getDrawable(R.drawable.searchcolor);
        view.setBackground( drawColor );
        return super.onCreateOptionsMenu(menu);

    }

Dies ist nun die XML-Datei searchcolor.xml zum Ändern der Plattenfarbe der Suchleiste

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
  <item>
      <shape >
          <solid Android:color="#ffffff" />
      </shape>
  </item>

  <!-- main color -->
  <item Android:bottom="1.5dp"
      Android:left="1.5dp"
      Android:right="1.5dp">
      <shape >
          <solid Android:color="#2c4d8e" />
      </shape>
  </item>

  <!-- draw another block to cut-off the left and right bars -->
  <item Android:bottom="10.0dp">
      <shape >
          <solid Android:color="#2c4d8e" />
      </shape>
  </item>
</layer-list>

nd menu/menu.xml zum Erstellen der Suche in der Aktionsleiste

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item Android:id="@+id/search"
          Android:icon="@drawable/search"
          Android:showAsAction="ifRoom"
          Android:actionViewClass="Android.widget.SearchView" />

</menu>
0
M.Raheel

Holen Sie sich SearchView in Ihre xxxActivity.Java-Datei und dann:

SearchView searchView = (SearchView)menu.findItem(R.id.my_search_view).getActionView();
int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_plate", null, null);

// Getting the 'search_plate' LinearLayout.
View searchPlate = searchView.findViewById(searchPlateId);
searchPlate.setBackgroundResource(R.drawable.textfield_searchview);

Erstelle Datei res/drawable/texfield_searchview.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_focused="true"
        Android:drawable="@drawable/textfield_search_selected_holo_light" />
    <item Android:drawable="@drawable/textfield_search_default_holo_light" />
</selector>
0
Jas

Wenn Sie weißen Text wünschen, sollten Sie von einem Aktionsleistenthema mit einem schwarzen Hintergrund wie Holo.Theme oder Theme.AppCompat.Light.DarkActionBar, wenn Sie die Support-Bibliothek verwenden.
Keine weiteren Einstellungen erforderlich.

0
Mehdiway