Custom RatingBar показывает разное количество звезд при использовании API 23

При настройке RatingBar в файле xml и установке android:drawableProgress в пользовательский рисунок, который я создал (как описано здесь), он показывает 5 звезды на экране предварительного просмотра студии Android с API 22, но когда я установил цель API на API 23, он показывает 1 звезду, но панель рейтинга (android:width="wrap_content") имеет ту же ширину, что и с 5 звездами. Это также проверяется на сотовых телефонах с ОС Lollipop и Marshmallow (такое же поведение, как описано).

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:padding="@dimen/spacing_standard"
          android:orientation="vertical"
          android:background="@color/sfly_orange"
          android:fillViewport="true">


<com.shutterfly.android.commons.common.ui.TypefacedTextView
        android:id="@+id/thank_you_label_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/order_confirmation_thank_you"
        android:textColor="@android:color/white"
        android:textSize="@dimen/rate_app_text_size_largest"
        android:gravity="center"
        app:typeface="medium"
        android:layout_marginTop="@dimen/spacing_standard"/>

<ImageView
        android:layout_width="@dimen/rate_app_image_width"
        android:src="@drawable/rate_icon"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="@dimen/rate_app_spacing_standard"
        android:layout_height="@dimen/rate_app_image_height"/>

<LinearLayout
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/rate_app_spacing_standard">

    <com.shutterfly.android.commons.common.ui.TypefacedTextView
            android:id="@+id/order_number_label_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            app:typeface="medium"
            android:text="@string/order_confirmation_order_number_label"
            android:textColor="@android:color/white"
            android:textSize="@dimen/rate_app_text_size_normal"/>

    <com.shutterfly.android.commons.common.ui.TypefacedTextView
            android:id="@+id/order_number_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            app:typeface="medium"
            android:layout_marginTop="@dimen/spacing_standard"
            android:textColor="@android:color/white"
            android:textSize="@dimen/rate_app_text_size_larger"/>

    <com.shutterfly.android.commons.common.ui.TypefacedTextView
            android:id="@+id/order_confirmation_details_label_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/order_confirmation_details_label"
            android:layout_marginTop="@dimen/spacing_standard_large"
            android:textAlignment="center"
            android:lineSpacingExtra="@dimen/rate_app_text_line_spacing"
            android:gravity="center"
            app:typeface="oblique"
            android:textColor="@android:color/white"
            android:textSize="@dimen/rate_app_text_size_normal"
            tools:ignore="UnusedAttribute"/>


    <RatingBar
            android:id="@+id/rate_app_rating_bar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/rate_app_spacing_standard"
            android:numStars="@integer/rating_bar_number_of_stars"
            android:stepSize="@integer/rating_bar_step"
            android:minHeight="@dimen/button_height"
            android:maxHeight="@dimen/button_height"
            style="?android:attr/ratingBarStyle"
            android:layout_gravity="center"
            android:progressDrawable="@drawable/rating_bar_star_style"/>
</LinearLayout>


<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical"
        android:layout_marginTop="@dimen/rate_app_spacing_standard">

    <com.shutterfly.android.commons.common.ui.TypefacedTextView
            android:id="@+id/rate_app_button"
            android:layout_width="@dimen/button_width"
            android:layout_height="@dimen/button_height"
            android:gravity="center"
            android:background="@drawable/button_white_background"
            android:paddingLeft="@dimen/spacing_standard"
            android:paddingRight="@dimen/spacing_standard"
            android:text="@string/rate_shutterfly"
            android:textAllCaps="true"
            android:textColor="@color/sfly_orange"
            android:textSize="@dimen/rate_app_text_size_normal_larger"
            app:typeface="medium"/>

    <com.shutterfly.android.commons.common.ui.TypefacedButton
            android:id="@+id/return_to_store_button"
            android:layout_width="@dimen/button_width"
            android:layout_height="@dimen/button_height"
            android:paddingLeft="@dimen/spacing_standard"
            android:layout_marginTop="@dimen/spacing_standard"
            android:layout_gravity="bottom|center_horizontal"
            android:paddingRight="@dimen/spacing_standard"
            android:text="@string/order_confirmation_return_to_store"
            style="?android:attr/borderlessButtonStyle"
            android:textAllCaps="true"
            android:textColor="@color/white"
            android:textSize="@dimen/rate_app_text_size_normal"
            app:btnTypeface="medium"
            android:layout_marginBottom="@dimen/spacing_standard"
            android:background="@drawable/button_orange_background"/>

</LinearLayout>

</LinearLayout>

Когда API 23 показывает 1 звезду Когда API 22 и ниже показывает 5 звезд


person Sagi Shchori    schedule 26.06.2016    source источник


Ответы (2)


Возможно, значение numStars по умолчанию изменилось.

Когда я устанавливаю его в файле xml, он работает нормально.

<RatingBar
    ...
    numStars="5" />

Это также может быть проблема с макетом, если у wrap_content недостаточно места для отображения 5 звезд. Может быть, у вас есть квалификаторы для Api 23? Если нет, и он отлично работает за ‹23, не обращайте на это внимания.

person Alexandre Martin    schedule 26.06.2016
comment
Спасибо за ваш комментарий, пожалуйста, посмотрите на мой отредактированный вопрос. - person Sagi Shchori; 27.06.2016
comment
Можете ли вы опубликовать полный файл xml, чтобы взглянуть на ширину макета? Спасибо - person Alexandre Martin; 27.06.2016

Вы можете использовать пользовательский стиль, как показано ниже, и использовать этот стиль в файле макета:

<style name="CustomRatingBar" parent="@android:style/Widget.RatingBar">

    <item name="android:progressDrawable">@drawable/rating_bar_star_style</item>
    <item name="android:minHeight">@dimen/button_height</item>
    <item name="android:maxHeight">@dimen/button_height</item>
    <item name="android:numStars">@integer/rating_bar_number_of_stars</item>
    <item name="android:stepSize">@integer/rating_bar_step</item>


</style>

И используйте это в своем макете, как показано ниже:

 <RatingBar
        android:id="@+id/rate_app_rating_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/rate_app_spacing_standard"
        style="@style/CustomRatingBar"
        android:layout_gravity="center"/>

Я думаю, что есть некоторые проблемы с темой, которую вы используете. Пожалуйста, попробуйте AppTheme вместо любого другого, и приведенный выше код может сработать для вас.

person Dhruvi    schedule 27.06.2016
comment
Спасибо за ваш комментарий, но количество звезд, отображаемых на API 23, равно единице. - person Sagi Shchori; 27.06.2016
comment
Я думаю, что есть некоторые проблемы с темой, которую вы используете. Пожалуйста, попробуйте AppTheme вместо любого другого, и приведенный выше код может сработать для вас. - person Dhruvi; 27.06.2016