8

Tôi đang cố gắng tạo kiểu cho tiện ích SearchView bằng cách sử dụng AppCompat v21 mới, nhưng tôi đang gặp một số vấn đề. Không có vấn đề gì bố trí tôi đặt trên "suggestionRowLayout" thuộc tính, nó không có gì cả. Danh sách thả xuống đề xuất của SearchView vẫn như cũ.Tạo kiểu cho tiện ích SearchView bằng thư viện hỗ trợ v21

Sự cố khác mà tôi gặp phải là khi "màu nhấn" có cùng màu với "màu cơ bản", trong chế độ xem tìm kiếm không thể phân biệt được dấu mũ. Bạn có biết làm thế nào tôi có thể thay đổi màu nhấn trong SearchView để chỉ được áp dụng ở đó? Tôi thấy rằng Play Âm nhạc có cùng một vấn đề.

Tôi đang theo hướng dẫn từ nhà phát triển Android blog:

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

Trả lời

5

Theo những gì tôi đã thấy trong giá trị tài nguyên nguồn SearchView suggestionRowLayout trong SearchView xảy ra khi lấy các thuộc tính cho SearchView và trong phương thức getSuggestionRowLayout(). Mặt khác, việc thực hiện SuggestionAdapter của thư viện v7 đang tăng thêm abc_search_dropdown_item_icons_2line.

Ý tưởng cho một workaround:

Hãy thử tham khảo cách bố trí khác nhau với sự giúp đỡ của refs.xml. Hãy chắc chắn rằng bạn giữ cùng id cho views như trong abc_search_dropdown_item_icons_2line

<item type="layout" name="abc_search_dropdown_item_icons_2line">@layout/my_suggestion_row</item> 
+0

đó làm việc! Nhưng theo [tài liệu] (http://android-developers.blogspot.com.es/2014/10/appcompat-v21-material-design-for-pre.html) Api mới hỗ trợ tạo kiểu cho SearchView. Đó là những gì tôi đã thử trước khi giải pháp của bạn: '' – MrBrightside

+0

Điều này không hoạt động cho tôi – JDJ

0

suggestionsRowLayout đã không làm việc cho tôi cả.

Trong trường hợp của tôi, tôi chỉ cần thay đổi màu nền của mỗi hàng và màu văn bản.

Vì vậy, tôi chỉ cần sửa đổi cách bố trí của các View trở về từ newView() trong SuggestionsAdapter tôi:

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> 

Bạn có thể tất nhiên thiết lập nền cho đối tượng vẽ được chọn cho nhấp chuột nổi bật.

1

Vấn đề của tôi là các SearchView không phải là loại android.support.v7.widget.SearchView, do đó tất cả các phong cách đã không áp dụng

<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"/> 
Các vấn đề liên quan