Ich habe das folgende Menülayout für meine ActionBar:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/itemSearch"
android:icon="@drawable/actionbar_icon_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.widget.SearchView"
android:title="Search"/>
</menu>
Und hier ist der Setup-Code:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.actionbar_default, menu);
SearchView searchView=(SearchView) menu.findItem(R.id.itemSearch).getActionView();
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
View searchEditText = searchView.findViewById(searchPlateId);
((TextView) searchEditText).setTextColor(Color.WHITE);
searchView.setOnCloseListener(new OnCloseListener() {...});
searchView.setOnQueryTextListener(new OnQueryTextListener() {...});
}
Alles ist in Ordnung, bis auf eine Sache: Auf meinem Asus-Tablet (TF-201, Android 3.2.1) sind Grafiken unscharf:
Wenn ich entferne android:actionViewClass="android.widget.SearchView"
sieht alles normal aus:
Dieses Problem wird nicht auf 4.1.2-Emulator reproduziert. Ich habe versucht, nur Menü Inflation Code in meinem onCreateOptionsMenu()
aber das hat nicht geholfen.
Wie behebe ich das?
Antworten:
4 für die Antwort № 1Also habe ich die Lösung verprügelt, jedoch erklärt es die richtige Kompatibilität nur für API 14 und höher, wenn nicht die ActionBarSherlock-Bibliothek verwendet wird.
Wichtig ist mit zu verbinden Thematischer Kontext der Anwendung, sonst erhalten Sie das niedrigste mögliche Design für SearchView (verschwommene Symbole)
Programmgesteuertes Erstellen von SearchView
FRAGMENT
SearchView searchView =
new SearchView(getActivity().getActionBar().getThemedContext());
AKTIVITÄT
SearchView searchView = new SearchView(getActionBar().getThemedContext());
Zweite Lösung (ABS-Kompatibilität, API 8+)
ACTION BAR SHERLOCK FRAGMENT
SearchView searchView =
new SearchView(getSherlockActivity().getSupportActionBar().getThemedContext());
ACTION BAR SHERLOCK AKTIVITÄT
SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
Dritte Lösung (API 11+)
In einigen Fällen, Einstellung SearchView.setBackgroundColor(int color)
lässt das Symbol weniger verschwommen erscheinen, versuchen Sie es Farbe weiß oder Farbe: Schwarz
Hinweis dass dies die Hintergrundfarbe für MenuItem ändert, ob nun ausgeblendet oder nicht, und z. Mit Theme Holo.Light.DarkActionBar müssen Sie die richtige Farbe entsprechend Ihrem ActionBar-Stil verwenden.
2 für die Antwort № 2
Ich habe das gleiche Problem erlebt, aber andere Antwort hat mein Problem nicht gelöst. Ich erweitere meine Aktivitätsklasse von AppCompatActivity
. Mein Searchview-Symbol sah auf Android 4 * verschwommen aus und es sah auf Android 5 * ohne Probleme gut aus.
Ich habe mein XML so geändert:
<item android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_24dp"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"
android:iconifiedByDefault="true" />
Und importiert
import android.support.v7.widget.SearchView;
Anstatt von import android.widget.SearchView;
Und das Problem wurde behoben.