[英]Android SearchView Icon
我想禁用搜索視圖組件中顯示的Mag圖標。 知道如何引用它並刪除它或用另一個drawable替換它?
由於問題的措辭不包含ActionBarSherlock
任何提及(標記除外),並且添加了注釋,接受的答案不適用於標准和/或支持庫操作欄,我發布了另一個答案。 這是onCreate
的Java代碼:
// 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);
根據這篇文章 ,當使用來自支持庫的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);
在你的主題中:
<style name="Theme" parent="Your parent theme">
<item name="android:searchViewSearchIcon">@android:drawable/ic_search</item>
</style>
編輯:
searchViewSearchIcon
是一個私有屬性。 因此,這個答案不起作用(在本機ActionBar上)。
要刪除提示搜索按鈕:
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"
添加這一行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" />
希望能幫助到你!
如果您使用的是v7 app compat庫,則可以在主題中輕松更改此內容。 在從AppCompat主題擴展的主題中,只需添加以下行:
<item name="searchViewSearchIcon">@drawable/ic_search</item>
這些線條取消了放大鏡:
//remove search icon
mSearchView.setIconifiedByDefault(false);
ImageView icon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
icon.setVisibility(View.GONE);
在您的主題風格中包括:
<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
是搜索字段右側的關閉圖標。
在searchView組件的xml中添加下一個:
app:searchHintIcon="@null"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.