Ich verwende das Toolbar-Such-Widget in meinem Projekt. Alles funktioniert einwandfrei, aber ich kann es kaum erwarten, die Unterstreichung unter dem Suchfeld in meiner Symbolleiste zu entfernen. Ich habe viele Lösungen ausprobiert und nichts funktioniert. Im Folgenden sind einige der Lösungen aufgeführt, die ich ausprobiert habe.
Voraussetzung ist, dass die weiße Unterstreichung im Bild entfernt wird
Ist Lösung:
//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. Lösung:
EditText searchEdit = ((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text));
searchEdit.setBackgroundColor(Color.TRANSPARENT);
Der obige Code dient zum Ändern des Hintergrunds von EditText. Die Unterstreichung wird jedoch unterhalb des Schließsymbols in SearchBar angezeigt.
Vervollständigen Sie den Code, den ich für das SearchBar-Widget verwende, wie folgt:
@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>
mögliches Duplikat von this
Vielen Dank im Voraus, jede Art von Lösungen und Anregungen wäre für mich sehr nützlich.
Einmal wie folgt versuchen
View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(Color.parseColor("here give actionbar color code"));
Hoffe das wird dir helfen.
Wenn Sie SearchView verwenden, verwenden Sie die API unter 21
Android:queryBackground="@Android:color/transparent"
sie können den folgenden Code verwenden, wenn Sie API 21 oder mehr verwenden
app:queryBackground="@Android:color/transparent"
Oder Sie können dies durch Stile tun:
<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
<item name="submitBackground">@color/primaryColor</item>
<item name="queryBackground">@color/primaryColor</item>
</style>
queryBackground ist ein Attribut für den Abfragehintergrund. Wenn Sie die Sprachsuche unterstützen, möchten Sie möglicherweise die Leitung auch unter dieser Mikrofontaste entfernen. Das ist, wofür submitBackground Attribut ist.
Dann wenden Sie den Stil natürlich auf Ihr Thema an.
<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
<item name="searchViewStyle">@style/SearchViewMy</item>
</style>
Fügen Sie einfach diese Zeile hinzu, wenn Sie ein v7-Widget verwenden
app:queryBackground="@Android:color/transparent"
Sie können versuchen, den folgenden Code zu verwenden, funktioniert wie ein Zauber für mich.
View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(ContextCompat.getColor(context,Android.R.color.transparent));
Für AndroidX habe ich dies basierend auf anderen Antworten hier verwendet,
mSearchView.findViewById(androidx.appcompat.R.id.search_plate)
.setBackgroundColor(Color.TRANSPARENT);
Der Code zum Ändern der Hintergrundfarbe von SearchView-Bearbeitungstext ist unten aufgeführt
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));
}
Wenn die Hintergrundfarbe Ihrer Aktionsleiste weiß ist, rufen Sie die obige Methode wie folgt auf.
setSearchViewEditTextBackgroundColor(this, searchView, R.color.white);
Jetzt verschwindet die Unterstreichung von SearchView-Bearbeitungstext.
Zuerst sollten Sie das Endergebnis einfach so erhalten:
searchPlate = (View) findViewById(R.id.search_plate);
Dann sollten Sie die Hintergrundfarbe wie folgt auf transparent setzen:
searchPlate.setBackgroundColor(Color.TRANSPARENT);
Dies funktioniert perfekt für androidx.appcompat.widget.SearchView!