Ich mache eine Anwendung, bei der ich zum Beispiel auf das Bild klicke (es ist eine Suchansicht).
das Suchfeld öffnet sich!
und es sieht aus wie
hier wird jedoch das Standardsuchsymbol (Lupe) angezeigt, das jedoch verschwindet, sobald Text eingegeben wird
aber ich möchte nicht, dass diese Lupe angezeigt wird, obwohl das Bild zum ersten Mal angeklickt wird
und hier verwende ich keine XML-Datei
mein Code lautet
public class MainActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout relative = new RelativeLayout(this);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
relative.setLayoutParams(params);
setContentView(relative);
SearchView searchView = new SearchView(this);
traverseView(searchView, 0);
// searchView.setIconifiedByDefault(false);
LayoutParams searchViewparams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
// searchViewparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
searchView.setLayoutParams(searchViewparams);
relative.addView(searchView);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
private void traverseView(View view, int index) {
if (view instanceof SearchView) {
SearchView v = (SearchView) view;
for(int i = 0; i < v.getChildCount(); i++) {
traverseView(v.getChildAt(i), i);
}
} else if (view instanceof LinearLayout) {
LinearLayout ll = (LinearLayout) view;
for(int i = 0; i < ll.getChildCount(); i++) {
traverseView(ll.getChildAt(i), i);
}
} else if (view instanceof EditText) {
((EditText) view).setTextColor(Color.GREEN);
((EditText) view).setHintTextColor(Color.BLACK);
} else if (view instanceof TextView) {
((TextView) view).setTextColor(Color.BLUE);
} else if (view instanceof ImageView) {
((ImageView) view).setImageResource(R.drawable.ic_launcher);
} else {
Log.v("View Scout", "Undefined view type here...");
}
}
}
Ich hatte auch Probleme damit. Ich habe das gefundene Tutorial kombiniert und eine vorhandene Antwort hier in stackoverflow gefunden.
int magId = getResources().getIdentifier("Android:id/search_mag_icon", null, null);
ImageView magImage = (ImageView) searchView.findViewById(magId);
magImage.setLayoutParams(new LinearLayout.LayoutParams(0, 0));
Beachten Sie, dass searchView ein LinearLayout ist. Verwenden Sie LinearLayout.LayoutParams, um eine Ausnahme zu vermeiden.
Ich habe es auch ausprobiert, aber die Ansicht wird dadurch nicht entfernt. Ich kann nicht verstehen warum:
magImage.setVisibility(View.GONE);
Die anderen Ansichten, die Sie ändern müssen, finden Sie in diesem Tutorial unter .
In meiner App habe ich Android.support.v7.widget.SearchView
und zum Ausblenden des Suchsymbols verwendet, das für mich funktioniert hat:
<Android.support.v7.widget.SearchView
...
app:iconifiedByDefault="false"
app:searchIcon="@null"
/>
Ich habe einfach @null in das searchHintIcon
-Attribut gesetzt:
<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
<item name="searchHintIcon">@null</item>
</style>
und wendete diesen Stil in meinem App-Thema an
<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
<item name="searchViewStyle">@style/SearchViewMy</item>
</style>
Funktioniert bei mir.
Versuchen Sie diese drei Zeilen:
Android:iconifiedByDefault="false"
Android:searchIcon="@null"
Android:searchHintIcon="@null"
* Es funktioniert nur für Android.widget.SearchView
TL; DR: Wenn Sie den Hinweis von EditText
auf die leere Zeichenfolge setzen, genügt es, das Hinweissymbol zu entfernen.
Ich habe eine Antwort gefunden, die tatsächlich funktioniert. Das Ändern des Symbols mithilfe von Reflektionen ist sehr umfangreich - wie z. B. unter Gestaltung der ActionBar-Suchansicht . Diese Website IST ist eine großartige Ressource, aber leider ändert sich der Suchhinweis ImageView
nicht (obwohl die Reflektion keine Fehler verursacht). Die einzige Möglichkeit, dieses Bild zu entfernen, war folgende:
try {
int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);
searchPlate.setHint("");
}
catch (Throwable t)
{
t.printStackTrace();
}
Sie sollten dies in Ihre onCreateOptionsMenu
-Methode einfügen und einen Verweis auf Ihre XML
- deklarierte SearchView
erhalten, indem Sie Folgendes verwenden:
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
Ich bin gerade auf das gleiche Problem gestoßen, hier sind einige Verweise.
http://blog.luxteam.net/2013/11/04/styling-appcompat-searchview/
Die Taste befindet sich in der folgenden Funktion. Sie legt das Symbol als ImageSpan
fest.
private CharSequence getDecoratedHint(CharSequence hintText) {
// If the field is always expanded, then don't add the search icon to the hint
if (!mIconifiedByDefault) return hintText;
SpannableStringBuilder ssb = new SpannableStringBuilder(" "); // for the icon
ssb.append(hintText);
Drawable searchIcon = getContext().getResources().getDrawable(getSearchIconId());
int textSize = (int) (mQueryTextView.getTextSize() * 1.25);
searchIcon.setBounds(0, 0, textSize, textSize);
ssb.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return ssb;
}
Verwenden Sie dazu das Attribut "searchHintIcon" in Ihren Stilen:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="searchViewStyle">@style/AppTheme.SearchView</item>
</style>
<style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView">
<item name="searchHintIcon">@null</item>
</style>
Sie können @null durch beliebige zeichnungsfähige Res ersetzen
Es ist die Antwort
ImageView searchViewIcon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);
ViewGroup linearLayoutSearchView =(ViewGroup) searchViewIcon.getParent();
linearLayoutSearchView.removeView(searchViewIcon);
wenn Sie in v7 Widget searchView.setIconifiedByDefault (false) verwenden, unterscheidet sich das Erscheinungsbild der Suchansicht. Sie setzen das Hinweissymbol in xml nur auf @null. Sie können diese Methode auch für andere Symbole anwenden.
Einfache Lösung ist searchHintIcon Attribut
<style name="SearchViewStyleMyApp" parent="Widget.AppCompat.SearchView">
<!-- Background for the search query section (e.g. EditText) -->
<item name="queryBackground">@Android:color/white</item>
<!-- note that this is how you style your hint icon -->
<item name="searchHintIcon">@null</item>
<!-- The hint text that appears when the user has not typed anything -->
<item name="queryHint">@string/search_hint</item>
</style>
sie können dies versuchen:
public class MainActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout relative = new RelativeLayout(this);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
relative.setLayoutParams(params);
setContentView(relative);
SearchView searchView = new SearchView(this);
searchView.setIconifiedByDefault(false);
traverseView(searchView, 0);
// searchView.setIconifiedByDefault(false);
LayoutParams searchViewparams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
// searchViewparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
searchView.setLayoutParams(searchViewparams);
relative.addView(searchView);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
private void traverseView(View view, int index) {
if (view instanceof SearchView) {
SearchView v = (SearchView) view;
for(int i = 0; i < v.getChildCount(); i++) {
traverseView(v.getChildAt(i), i);
}
} else if (view instanceof LinearLayout) {
LinearLayout ll = (LinearLayout) view;
for(int i = 0; i < ll.getChildCount(); i++) {
traverseView(ll.getChildAt(i), i);
}
} else if (view instanceof EditText) {
((EditText) view).setTextColor(Color.GREEN);
((EditText) view).setHintTextColor(Color.BLACK);
} else if (view instanceof TextView) {
((TextView) view).setTextColor(Color.BLUE);
} else if (view instanceof ImageView) {
((ImageView) view).setImageResource(R.drawable.ic_launcher);
} else {
Log.v("View Scout", "Undefined view type here...");
}
}
}