2011-09-26 36 views
4

我有我的應用程序自定義的RatingBar應該爲電影顯示任一網站的平均得分或用戶的評價,而在用戶評分。顏色應根據所顯示的評分是網站平均值還是用戶評分而改變。上的RatingBar調用getProgressDrawable()只顯示一個星

具體的過程: 用戶觀點的電影。顯示電影的網站平均評分。爲的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並彈出一個對話框他們可以在這裏添加他們自己的電影自定義評級。在關閉對話框後,代碼會更新上面評級欄中顯示的評級。我還想更改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。 :)

+0

從文檔的RatingBar:「二級進步不應該由客戶端,因爲它是內部使用,作爲背景的分數充滿明星修改。」 – greg7gkb

回答

1

我經歷同樣的事情,現在......我不能爲我的生命得到它通過代碼預期的工作,所以我要去的janky佈局路線。 :(

<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); 

很爛,但它的作品讓我知道如果你拿出任何其他解決了

+0

謝謝,這是我想出了太多的唯一解決方案。我很確定這是Android代碼中的一個錯誤。 – inky

0

使用嘗試。 : 使用ProgressBar.setProgressDrawableTiled(可繪製)

,並設置minSDK 21