我正试图使用新的AppCompat v21来设计SearchView小部件的样式,但我遇到了一些问题。无论我在"suggestionRowLayout"属性上设置了什么布局,它都不会起任何作用。SearchView的建议下拉列表保持不变。
我遇到的另一个问题是,当"强调颜色"与"原色"相同时,在搜索视图中无法区分插入符号的位置。你知道我如何才能将SearchView中的强调色更改为仅在那里应用吗?我发现播放音乐也有同样的问题。
我遵循安卓开发者博客的指南:
http://android-developers.blogspot.com.es/2014/10/appcompat-v21-material-design-for-pre.html
根据我在SearchView中看到的内容,在检索SearchView和方法getSuggestionRowLayout()
的属性时,会出现SearchView中的源suggestionRowLayout
资源值。另一方面,v7库的SuggestionAdapter的实现正在对abc_search_dropdown_item_icons_2line
进行膨胀。
解决方法:
尝试在refs.xml
的帮助下引用不同的布局。确保视图的ID与abc_search_dropdown_item_icons_2line
中的ID相同
<item type="layout" name="abc_search_dropdown_item_icons_2line">@layout/my_suggestion_row</item>
suggestionsRowLayout
对我也不起作用。
在我的情况下,我只需要更改每一行的背景颜色和文本颜色。
所以我只是在我的SuggestionsAdapter:中修改了从newView()
返回的视图的布局
public class SuggestionsAdapter extends CursorAdapter
{
public SuggestionsAdapter(Context context, Cursor cursor)
{
super(context, cursor, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor)
{
TextView tv = (TextView) view.findViewById(R.id.item);
tv.setText(cursor.getString(COL_NAME));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// I modified the layout of search_item.xml
View view = inflater.inflate(R.layout.search_item, parent, false);
return view;
}
}
search_item.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="12dp" >
<TextView
android:id="@+id/item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/red" />
</LinearLayout>
当然,您可以将背景设置为可绘制的选择器,用于点击高亮显示。
我的问题是Searchview的类型不是android.support.v7.widget.Searchview,因此所有样式都不应用
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
app:showAsAction="ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>