【问题标题】:Styling the SearchView Widget using support library v21使用支持库 v21 设置 SearchView Widget 的样式
【发布时间】:2014-12-20 20:58:57
【问题描述】:

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

我遇到的其他问题是,当“重音颜色”与“原色”颜色相同时,在搜索视图中无法区分插入符号在哪里。您知道如何将 SearchView 中的强调色更改为仅应用于那里吗?我发现 Play Music 也有同样的问题。

我正在关注 Android 开发者博客中的指南:

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

【问题讨论】:

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


    【解决方案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"/>
    

    【讨论】:

      【解决方案2】:

      suggestionsRowLayout 也不适合我。

      就我而言,我只需要更改每行的背景颜色和文本颜色。

      所以我只是在我的 SuggestionsAdapter 中修改了从 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>
      

      您当然可以将背景设置为可绘制的选择器以用于点击突出显示。

      【讨论】:

        【解决方案3】:

        根据我在 SearchView 源 suggestionRowLayout 中看到的,在检索 SearchView 的属性和方法 getSuggestionRowLayout() 时,SearchView 中的资源值会发生。另一方面,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>
        

        【讨论】:

        • 行得通!但根据documentation,新的 Api 支持设置 SearchView 的样式。这就是我在您的解决方法之前尝试过的:&lt;style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"&gt; &lt;item name="suggestionRowLayout"&gt;@layout/searchview_dropdown&lt;/item&gt; &lt;/style&gt;
        猜你喜欢
        • 2014-12-16
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多