2017-06-02 17 views
10

Tôi đang sử dụng RecyclerView với RatingBar trong mỗi hàng. Bây giờ, đôi khi một phần của RatingBar s được vẽ không chính xác. Sau khi rời khỏi màn hình và quay trở lại, tất cả trở lại bình thường. Tôi không biết tại sao điều này xảy ra, tôi thậm chí đã xóa bất kỳ kiểu nào từ RatingBar do đó nó phải có giao diện mặc định.RatingBar đang nhận được bán trong suốt

Đây là cách nó trông:

enter image description here

Thử nghiệm trên Nexus 6P (Android 7.1.1). Cũng được thử nghiệm trên Samsung Galaxy J3 (2016) (Android 5.1.1) và không có vấn đề gì ở đây.

Tôi cũng đã thêm

holder.rbRating.requestLayout(); 

trong onBindViewHolder(). Nó làm giảm vấn đề một chút, nhưng nó vẫn còn hiện diện. Khi tôi cuộn một hàng "xấu" ra khỏi màn hình khi nó được tái sử dụng thì có vẻ ổn.

Dưới đây là cách bố trí hàng:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:paddingTop="@dimen/main_margin_top" 
    android:paddingBottom="@dimen/main_margin_top" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/tvRatingTitle" 
     android:text="Czystość wody" 
     android:textSize="16sp" 
     android:textStyle="bold" 
     android:layout_centerHorizontal="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <RatingBar 
     android:id="@+id/rbRating" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="4dp" 
     android:isIndicator="true" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/tvRatingTitle" 
     android:numStars="5" 
     android:rating="2.5" 
     android:stepSize="0.1" /> 

    <CheckBox 
     android:id="@+id/chkMissing" 
     android:text="Zaznacz jeśli nie ma" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/rbRating" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 

Tôi cũng đã thử chuyển sang android.support.v7.widget.AppCompatRatingBar, nhưng nó không thực hiện bất kỳ sự khác biệt.

EDIT:

giải pháp @Muhib Pirani dường như được làm việc, nhưng tôi có 2 vấn đề nhỏ:

1) trên Nexus 6P lớp đầu tiên của ngôi sao đang offsetted bởi vài điểm ảnh (phóng to để xem):

enter image description here

2) Mở Samsung Galaxy J3 (2016) nó trông như thế này:

enter image description here

Tôi ổn với đường viền nhưng tôi muốn chúng có màu xanh lục (không phải màu xám, nền cũng phải có màu xám) trong các ngôi sao trống.

+0

Chụp phân cấp chế độ xem qua 'Công cụ -> Android -> Trình theo dõi bố cục' và xem sự khác biệt chính giữa' RatingBar' đó là gì. Khi bạn tìm thấy thuộc tính dẫn đến hành vi này, sẽ dễ dàng hơn khi tìm ra nguyên nhân thực sự. Có vẻ như đó là kênh alpha được thay đổi hoặc bằng cách nào đó một màu được áp dụng. – azizbekian

Trả lời

3

Tôi cũng gặp phải sự cố tương tự. Tôi đã phải lập trình thiết lập màu sắc để RatingBar như thế này và nó làm việc:

LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable(); 
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(context, R.color.colorPrimaryDark), PorterDuff.Mode.SRC_ATOP); 
layerDrawable.getDrawable(1).setColorFilter(ContextCompat.getColor(context, R.color.colorPrimaryDark), PorterDuff.Mode.SRC_ATOP); 
layerDrawable.getDrawable(0).setColorFilter(ContextCompat.getColor(context, R.color.editTextBor), PorterDuff.Mode.SRC_ATOP);//when not selected color. 

Giữ layerDrawable.getDrawable(2)layerDrawable.getDrawable(1) cùng màu.

+0

thử đặt layerDrawable.getDrawable (0) .setColorFilter (ContextCompat.getColor (ngữ cảnh, android.R.color.transparent), PorterDuff.Mode.SRC_ATOP); –

+0

Sau đó, nó trông như thế này: http://imgur.com/a/czcJC (Nexus 6P) và http://imgur.com/a/wUvgH (Samsung Galaxy J3) - không phải những gì tôi mong đợi. – Makalele

+0

Tôi đang kiểm tra nó trên thiết bị Oneplus x, nó hoạt động tốt, tôi đoán thanh đánh giá cần một số cải tiến. –

1

Tôi cũng gặp sự cố với RatingBar gốc, vì vậy tôi quyết định sử dụng MaterialRatingBar. Nó giải quyết mọi vấn đề của tôi.

Hy vọng điều này sẽ giúp

+1

Giải pháp làm việc thực sự, không có vấn đề cho đến nay. – Makalele

Các vấn đề liên quan