webentwicklung-frage-antwort-db.com.de

Android ActionBar Suchansicht anpassen

--- PROBLEME BEHOBEN - ANTWORTEN IM EDIT TEXT HINZUFÜGEN ---

Ich verwende den ActionBar Sherlock in meiner Android) App. Dort möchte ich einen SearchView anzeigen. Es funktioniert soweit gut, aber ich merke, dass ich Ich mache etwas falsch, wenn ich versuche, es anzupassen.

Ich mache es so:

searchView.setQueryHint("Search: ");
searchView.setOnQueryTextListener(this);
searchView.setOnCloseListener(...);

searchMenuItem = menu.add("Search place");
searchMenuItem.setIcon(R.drawable.ic_action_search)
              .setActionView(searchView)
              .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |  MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

Ich möchte zwei Dinge tun:

  1. Ändern Sie die Farbe des Textes "Suchen", der im angezeigten Textfeld angezeigt wird. Es sieht so aus, als hätte ich es mit dem gesamten Textstil in meinem Thema geändert, aber ich hoffe, ich kann irgendwie eine separate Farbe einstellen.

  2. Wenn Sie diese Suchansicht öffnen, wird sie auf der linken Seite der Aktionsleiste angezeigt. Aber ich brauche es auf der rechten Seite. Das Symbol (die Lupe) befindet sich tatsächlich auf der rechten Seite der Leiste, aber durch Drücken wird das EditText-Feld auf der linken Seite geöffnet. Ich habe versucht, LayoutParams zu verwenden, aber ich vermisse etwas Wesentliches, wenn ich versuche, es mit LayoutParams zur Aktionsleiste hinzuzufügen.

enter image description here

Hoffentlich kann mir jemand dabei helfen.

Vielen Dank, Tobias

---- EDIT ----

Okay, damit ist eine Sache schon gelöst. Durch Hinzufügen der Aktionsleiste per XML wird TextEdit nach rechts verschoben.

getSupportMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
Log.e(TAG, "searchView: " + searchView);

Und in meiner menu.xml

<item Android:id="@+id/action_search"
 Android:title="Search"
 Android:icon="@drawable/ic_action_search"          
 Android:showAsAction="always"
 Android:actionViewClass="com.actionbarsherlock.widget.SearchView" />

Also mindestens ein Rätsel gelöst (warum auch immer dies einen Unterschied machte). Das neu erstellte XML wird beim Aufruf jedoch nicht mehr geschlossen

searchMenuItem.collapseActionView();

Es stimmt also immer noch etwas nicht.

--- EDIT 2 ---

Nur um es dich wissen zu lassen. Ich habe die Lösung für die Textfarbe gefunden. Dies kann mit der AutoCompleteTextView der SearchView erreicht werden:

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

Das letzte Problem, das ich habe, ist, dass SearchView beim Senden eines Textes nicht mehr geschlossen wird. CollapseActionView () usw. funktioniert also nicht. Irgendwelche Ideen?

--- EDIT 3 ---

Okay, ich habe eine Lösung gefunden. Ich weiß nicht, ob dies der richtige Weg ist, aber bei der Verwendung

((SearchView) searchMenuItem.getActionView()).setIconified(true);

es schließt das EditText

Ich muss es zweimal machen, weil das erste Mal nur meinen Eingabetext "löscht" und den "Hinweis" anzeigt, während das zweite Mal den Hinweis EditText "schließt" und die searchView auf die Lupe reduziert. Unbeholfener Stil, aber es funktioniert. :-)

44
Tobias Reich

Ich habe eine Klasse gemacht SearchViewFormatter um das native SearchView Android Widget einfach zu formatieren. Ein Beispiel:

new SearchViewFormatter()
            .setSearchBackGroundResource(R.drawable.my_bg)
            .setSearchIconResource(R.drawable.my_ic, true, false) //true to icon inside edittext, false to outside
            .setSearchVoiceIconResource(R.drawable.my_ic)
            .setSearchTextColorResource(R.color.my_color)
            .setSearchHintColorResource(R.color.my_color)
            .setSearchCloseIconResource(R.drawable.my_ic)
            .setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS)
            .format(mSearchView);
29
ademar111190

Zu Ihrer Information, jetzt mit ActionBar-Unterstützung, Version 7, kompatibel mit der Art und Weise, wie Sie die Farbe des Abfragehinweises, die Textfarbe und die Textgröße ändern können:

import Android.support.v4.view.MenuItemCompat;
import Android.support.v7.widget.SearchView;
import Android.support.v7.widget.SearchView.SearchAutoComplete;

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_home, menu);
    MenuItem searchItem = menu.findItem(R.id.item_search);
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    mSearchView.setOnQueryTextListener(this);
    mSearchView.setQueryHint(getString(R.string.text));
    SearchAutoComplete searchAutoComplete = (SearchAutoComplete) mSearchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setHintTextColor(mRes.getColor(Android.R.color.white));
    searchAutoComplete.setTextSize(14);

    return super.onCreateOptionsMenu(menu);
}
15
prcaen

Ich habe die Ecke für Edit Text so abgerundet.

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

        int searchSrcTextId = getResources().getIdentifier("Android:id/search_src_text", null, null);
        EditText searchEditText = (EditText) searchView.findViewById(searchSrcTextId);
        searchEditText.setTextColor(Color.BLACK);
        searchEditText.setHintTextColor(Color.LTGRAY);

        int closeButtonId = searchView.getContext().getResources().getIdentifier("Android:id/search_close_btn", null, null);
        ImageView closeButtonImage = (ImageView) searchView.findViewById(closeButtonId);
        closeButtonImage.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN);

bg_white_background.xml:

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

Before click search button

After click search button

<SearchView
                Android:id="@+id/searchView"
                Android:layout_width="match_parent"
                Android:queryHint="Serach"
                Android:layout_height="match_parent"></SearchView>
4
Naveen Kumar M

So lösen Sie Ihre Nummer 2-Frage

Ändern Sie diese Zeile:

.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |  MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

Zu:

.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

verwenden Sie nur den Parameter SHOW_AS_ACTION_IF_ROOM für die Methode setShowAsAction()

1
alfred abalos