使用支持库v21设置SearchView小部件的样式

时间:2014-10-24 23:40:42

标签: android android-support-library searchview android-5.0-lollipop material-design

我尝试使用新的AppCompat v21设置SearchView小部件的样式,但我遇到了一些问题。无论我设置什么布局" suggestionRowLayout"属性,它什么都不做。 SearchView的建议下拉列表保持不变。

我遇到的其他问题是"强调颜色"与"原色相同的颜色",在搜索视图中无法区分插入符号的位置。您知道如何更改SearchView中的重音颜色仅适用于那里吗?我发现Play Music遇到了同样的问题。

我遵循Android开发者博客的指南:

http://android-developers.blogspot.com.es/2014/10/appcompat-v21-material-design-for-pre.html

3 个答案:

答案 0 :(得分:6)

根据我在SearchView源suggestionRowLayout中看到的内容,SearchView中的资源值在检索SearchView的属性和方法getSuggestionRowLayout()时发生。另一方面,v7库的SuggestionAdapter的实现正在膨胀abc_search_dropdown_item_icons_2line

解决方法的想法:

refs.xml的帮助下尝试引用不同的布局。确保为views保留与abc_search_dropdown_item_icons_2line

相同的ID
 <item type="layout" name="abc_search_dropdown_item_icons_2line">@layout/my_suggestion_row</item>

答案 1 :(得分:1)

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>

当然,你可以将背景设置为可以点击高亮显示的选择器。

答案 2 :(得分:1)

我的问题是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"/>