使用支持库v21样式化SearchView小部件

8
我正在尝试使用新的AppCompat v21样式化SearchView小部件,但我遇到了一些问题。无论我在“suggestionRowLayout”属性上设置什么布局,它都没有任何作用。SearchView的建议下拉列表保持不变。
我遇到的另一个问题是,当“强调颜色”与“主要颜色”相同时,在searchview中不可能区分插入符号所在的位置。您知道如何更改SearchView中的强调颜色仅应用于那里吗?我发现Play Music也有同样的问题。
我正在按照Android Developers博客中的指南进行操作:

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

3个回答

7
根据我在SearchView源代码中所看到的,suggestionRowLayout资源值在检索SearchView属性和方法getSuggestionRowLayout()时出现。另一方面,v7库的SuggestionAdapter实现会膨胀abc_search_dropdown_item_icons_2line
解决方法的想法是:通过refs.xml引用不同的布局。确保您将视图的ID与abc_search_dropdown_item_icons_2line相同。
 <item type="layout" name="abc_search_dropdown_item_icons_2line">@layout/my_suggestion_row</item>

1
可以!但是根据文档,新的API支持对SearchView进行样式设置。这就是在你的解决方法之前我尝试过的:<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"> <item name="suggestionRowLayout">@layout/searchview_dropdown</item> </style> - MrBrightside

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"/>

1

suggestionsRowLayout 对我也没有起作用。

在我的情况下,我只需要更改每行的背景颜色和文本颜色。

因此,我只需修改从 newView() 返回的 View 的布局即可。

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>

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接