[英]Calling getProgressDrawable() on a RatingBar only displays one star
我的應用程序中有一個自定義RatingBar,如果用戶對其進行評級,則應顯示網站平均評分或電影的用戶評級。 顏色應根據顯示的評級是網站平均值還是用戶評級而改變。
這是過程:用戶觀看電影。 顯示電影的網站平均評分。
RatingBar的布局代碼:
<RatingBar android:id="@+id/ratingBar" android:isIndicator="true"
android:layout_margin="10dip" style="@style/RatingBar"
android:progressDrawable="@drawable/site_rating_bar" android:stepSize="0.1" />
RatingBar風格:
<style name="RatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:numStars">10</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:minHeight">30dip</item>
<item name="android:maxHeight">30dip</item>
</style>
site_rating_bar.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background"
android:drawable="@drawable/btn_rating_star_off" />
<item android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/btn_rating_star_off" />
<item android:id="@+android:id/progress"
android:drawable="@drawable/btn_site_rating_star_on" />
</layer-list>
用戶可以點擊RatingBar並打開一個對話框,在那里他們可以添加自己的電影自定義評級。 關閉對話框后,代碼將更新上面RatingBar中顯示的評級。 我還想更改ProgressDrawable,以便星星的顏色發生變化,表明用戶已添加自定義評級。
但是當我嘗試以編程方式設置ProgressDrawable時它會更新它以便顯示正確的顏色,但它只顯示一個橫跨屏幕的星形。
ratingBar.setProgressDrawable(thisActivity.getResources().getDrawable(R.drawable.user_rating_bar));
user_rating_bar.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background"
android:drawable="@drawable/btn_rating_star_off" />
<item android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/btn_rating_star_off" />
<item android:id="@+android:id/progress"
android:drawable="@drawable/btn_user_rating_star_on" />
</layer-list>
我已經嘗試保存原始邊界並重置它們,但它沒有幫助:
Rect bounds = ratingBar.getProgressDrawable().getBounds();
ratingBar.setProgressDrawable(thisActivity.getResources().getDrawable(R.drawable.user_rating_bar));
ratingBar.getProgressDrawable().setBounds(bounds);
還嘗試重置numStars以防它丟失。
任何想法都非常感激。 TIA。 :)
我現在正在經歷同樣的事情......我不能為我的生活讓它按照預期的方式通過代碼工作,所以我要去janky-layout路線。 :(
<RatingBar
android:id="@+id/beer_rating"
android:numStars="5"
android:progressDrawable="@drawable/rating_bar"
android:indeterminateDrawable="@drawable/rating_bar"
android:stepSize="0.5"
android:isIndicator="true"
android:layout_gravity="center"
style="?android:attr/ratingBarStyleSmall" />
<RatingBar
android:id="@+id/beer_rating_average"
android:indeterminateDrawable="@drawable/rating_bar_average"
android:isIndicator="true"
android:layout_gravity="center"
android:numStars="5"
android:progressDrawable="@drawable/rating_bar_average"
android:stepSize="0.5"
android:visibility="gone"
style="?android:attr/ratingBarStyleSmall"/>
然后只需在需要時翻轉它們的可見性:
findViewById(R.id.beer_rating).setVisibility(View.GONE);
findViewById(R.di.beer_rating_average).setVisibility(View.VISIBLE);
糟透了,但它確實有效。 如果你想出任何其他的解決方案,請告訴我。
嘗試使用:使用ProgressBar.setProgressDrawableTiled(Drawable)
並將minSDK設置為21
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.