是否可以自定义android.widget.SearchView(我在actionBar中使用它)的布局?
我想要更改图标和文本框背景。
是否可以自定义android.widget.SearchView(我在actionBar中使用它)的布局?
我想要更改图标和文本框背景。
我发现唯一的方法是使用反射。
SearchView mSearchView = (SearchView)menu.findItem(R.id.search).getActionView();
try
{
Field searchField = SearchView.class.getDeclaredField("mSearchButton");
searchField.setAccessible(true);
ImageView searchBtn = (ImageView)searchField.get(mSearchView);
searchBtn.setImageResource(R.drawable.search_img);
searchField = SearchView.class.getDeclaredField("mSearchPlate");
searchField.setAccessible(true);
LinearLayout searchPlate = (LinearLayout)searchField.get(mSearchView);
((ImageView)searchPlate.getChildAt(0)).setImageResource(R.drawable.search_img);
searchPlate.setBackgroundResource(R.drawable.edit_text_bkg);
}
catch (NoSuchFieldException e)
{
Log.e(TAG,e.getMessage(),e);
}
catch (IllegalAccessException e)
{
Log.e(TAG,e.getMessage(),e);
}
声明以下样式,并仅自定义您需要自定义的属性,删除其余属性(因此它们会从父样式继承):
<style name="Widget.AppCompat.SearchView.CustomSearchView" parent="@style/Widget.AppCompat.SearchView">
<item name="layout">@layout/abc_search_view</item>
<item name="queryBackground">@drawable/abc_textfield_search_material</item>
<item name="submitBackground">@drawable/abc_textfield_search_material</item>
<item name="closeIcon">@drawable/abc_ic_clear_mtrl_alpha</item>
<item name="goIcon">@drawable/abc_ic_go_search_api_mtrl_alpha</item>
<item name="voiceIcon">@drawable/abc_ic_voice_search_api_mtrl_alpha</item>
<item name="commitIcon">@drawable/abc_ic_commit_search_api_mtrl_alpha</item>
<item name="suggestionRowLayout">@layout/abc_search_dropdown_item_icons_2line</item>
<item name="searchIcon">@drawable/ic_action_search</item>
</style>
<item name="searchViewStyle">@style/Widget.AppCompat.SearchView.Bonial</item>
<style name="Theme.MyActionBarActivity" parent="@style/Theme.AppCompat.Light">
private int getSearchIconId() {
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(com.android.internal.R.attr.searchViewSearchIcon,
outValue, true);
return outValue.resourceId;
}
<style name="Your_Theme" parent="@style/Theme.Sherlock">
<item name="searchViewSearchIcon"> @drawable/ic_menu_search </item>
</style>
在Holo中:
<style name="Your_Theme" parent="@style/Theme.Light">
<item name="android:searchViewSearchIcon"> @drawable/ic_search </item>
</style>
android:searchViewSearchIcon
不是公开可访问的。 - Kyle Ivey
searchPlate.setBackgroundResource(R.drawable.textfield_searchview_holo_light);
时,为什么Holo下划线距离ActionBar底部的距离比默认样式更远? - Etienne Lawlor