検索ビューコンポーネント内に表示されるMagアイコンを無効にしたい。それを参照して削除したり、別のドローアブルで置き換える方法はありますか?
あなたのテーマで:
<style name="Theme" parent="Your parent theme">
<item name="Android:searchViewSearchIcon">@Android:drawable/ic_search</item>
</style>
編集:searchViewSearchIcon
はプライベート属性です。したがって、この回答は機能しません(ネイティブActionBarでは)。
質問の文言には、ActionBarSherlock
の言及が含まれておらず(タグを除く)、承認された回答が標準またはサポートライブラリのアクションバーで機能しないというコメントが追加されているため、別の回答を投稿しています。 Java onCreate
のコード:
_// obtain action bar
ActionBar actionBar = getSupportActionBar();
// find SearchView (im my case it's in a custom layout because of left alignment)
View v = actionBar.getCustomView();
SearchView searchView = (SearchView)v.findViewById(R.id.search_view);
ImageView icon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);
// method 1: does not work persistently, because the next line
// should be probably called after every manipulation with SearchView
// icon.setVisibility(View.GONE);
// method 2: working code
icon.setAdjustViewBounds(true);
icon.setMaxWidth(0);
icon.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
icon.setImageDrawable(null);
_
これによると post 、サポートライブラリのSearchView
(_Android-support-v7-appcompat
_)をsetIconifiedByDefault(false)
アイコンが編集テキストボックス(SearchAutoComplete
)の外に表示されます。それ以外の場合(setIconifiedByDefault(true)
)ボックス内に表示されます。提示されたコードはデフォルトで無効化された「アイコン化」に使用され、「アイコン化された」検索ビューで機能するようにいくつかの変更が必要になる場合があります。同じことがActionBarSherlock
に当てはまるかどうかはわかりません。
お役に立てれば。
このアイコンはヒントです。したがって、新しいヒントテキストを簡単に設定できます。
int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);
searchPlate.setHint("Search");
ヒントテキストとしてアイコンが必要な場合は、ImageSpanでスパン可能な文字列を使用します。
int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);
searchPlate.setTextColor(getResources().getColor(R.color.search_text_color));
SpannableString string = new SpannableString(" ");
Drawable d = getResources().getDrawable(R.drawable.ic_search);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
string.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
searchPlate.setHint(string);
ヒント検索ボタンを削除するには:
mNearMeSearchBar = (SearchView) mView.findViewById(R.id.nearme_search_component_nearme_edittext);
mNearMeSearchBar.setIconifiedByDefault(false); //Removes Search Hint Icon
ドローアブル検索ボタンを変更するには:
int searchImgId = getResources().getIdentifier("Android:id/search_mag_icon", null, null);
ImageView v = (ImageView) mNearMeSearchBar.findViewById(searchImgId);
v.setImageResource(R.drawable.ic_compass);
この行をMenuItemに追加する必要があります_Android:iconifiedByDefault="@Android:color/transparent"
_
_<item
Android:id="@+id/activity_home_action_search"
Android:icon="@drawable/ic_action_search"
Android:title="@string/activity_home_search_title"
Android:iconifiedByDefault="@Android:color/transparent"
app:actionViewClass="Android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
_
または、プログラムで作成することもできますsearchView.setIconifiedByDefault(true);
_@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
getMenuInflater().inflate(R.menu.home, menu);
MenuItem searchMenuItem = menu.findItem(R.id.activity_home_action_search);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setIconifiedByDefault(true);
}
_
次のようにSearchView
スタイルをカスタマイズする必要があります:
<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
<!-- Search button icon -->
<item name="searchIcon">@drawable/ic_arrow_back</item>
</style>
そして、それをAppTheme
に追加します。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- your other colors and styles -->
<item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>
タグstyle
を使用して検索ビューに適用します。
<Android.support.v7.widget.SearchView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/searchView"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
app:queryHint="@string/search_hint"
Android:focusable="true"
Android:focusableInTouchMode="true"
style="@style/MySearchViewStyle"
app:iconifiedByDefault="false" />
それが役に立てば幸い!
これらの行は拡大鏡を削除しました:
//remove search icon
mSearchView.setIconifiedByDefault(false);
ImageView icon = (ImageView) mSearchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);
icon.setVisibility(View.GONE);
V7アプリ互換ライブラリを使用している場合は、これをテーマで簡単に変更できます。 AppCompatテーマから拡張したテーマに、次のような行を追加します。
<item name="searchViewSearchIcon">@drawable/ic_search</item>
SearchViewコンポーネントのxmlに次を追加:
app:searchHintIcon="@null"
あなたのテーマスタイルにこれを含めてください:
<style name="YourTheme.Toolbar">
<item name="searchViewStyle">@style/YourActionBarSearch</item>
<item name="editTextColor">@color/your_ab_text_color</item>
<item name="Android:textColorHint">@color/your_ab_hint_color</item>
</style>
searchViewStyle
を使用してSearchViewのスタイルを定義できるようになりました。editTextColor
は検索ボックスのテキストの色を設定します。 Android:textColorHint
を設定すると、ヒントの色も設定されます。 "探す..."。
<style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView">
<item name="searchIcon">@drawable/ic_ab_search</item>
<item name="queryBackground">@null</item>
<item name="submitBackground">@null</item>
<item name="searchHintIcon">@null</item>
<item name="defaultQueryHint">@null</item>
<item name="closeIcon">@drawable/ic_ab_small_search_close</item>
</style>
これにより、多かれ少なかれあなたの検索ビューのスタイルが決まります。フィールドsearchIcon
は、アクションバーのアイコンです。 フィールドsearchHintIcon
は、検索フィールドのヒントの左側にある小さなアイコンです、これは質問で求めています。アイコンを削除するには、@null
に設定します。フィールドcloseIcon
は、検索フィールドの右側にある閉じるアイコンです。