2013-12-15 54 views
0

我在我的應用程序中使用自定義樣式,使用自己的星星做了評級欄。Android評分欄不更新

我的RatingBar定義如下:

<RatingBar 
      android:layout_width="wrap_content" 
      android:layout_height="15dp" 
      android:id="@+id/ratingBar" 
      android:numStars="10" 
      android:stepSize="1" 
      android:rating="10" 
      android:layout_marginTop="5dp" 
      android:layout_below="@id/feedbackTable" 
      android:layout_toRightOf="@id/ratingText" 
      android:layout_marginLeft="5dp" 
      style="@style/starBar" /> 

我在styles.xml選用的風格是:

<style name="starBar" parent="@android:style/Widget.RatingBar"> 
     <item name="android:progressDrawable">@drawable/ratingstars</item> 
     <item name="android:minHeight">22dip</item> 
     <item name="android:maxHeight">22dip</item> 
    </style> 

隨着ratingstars.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/background" android:drawable="@drawable/ratingstars_full_empty" /> 
    <item android:id="@+id/secondaryProgress" android:drawable="@drawable/ratingstars_full_empty" /> 
    <item android:id="@+id/progress" android:drawable="@drawable/ratingstars_full_filled" /> 
</layer-list> 

當我調整android:rating,它會顯示正確的星星數量,並在預覽中爲空。但是,使用我的仿真器或真實設備,酒吧會保持星星完全充滿(10/10)。我試着用下面的代碼編程調整它:

ratingbar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
       Log.d("rating", rating+""); 
       ratingbar.setRating(rating); 
      } 
     }); 

現在從logcat的日誌實際上表明,評級發生變化,但酒吧沒有視覺本身例如更新6星滿,4空,我不知道爲什麼。

由於預覽也顯示它正確,所以drawables是正確的,那麼會導致這種情況的原因是什麼?

編輯:

這是ratingstars_full_filled.xml

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/star" /> 

    <item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/star" /> 

    <item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/star" /> 

    <item android:drawable="@drawable/star" /> 

</selector> 

這裏是ratingstars_full_empty.xml

<?xml version="1.0" encoding="utf-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/star_empty" /> 

    <item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/star_empty" /> 

    <item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/star_empty" /> 

    <item android:drawable="@drawable/star_empty" /> 

</selector> 
+0

「現在從logcat的日誌實際上表明,評級發生變化,但酒吧沒有視覺本身例如6星充滿更新,和4個空的,我不知道爲什麼。」 ======>這意味着您可能無法正確更新評分欄。因此,您只需檢查代碼欄等級是否在您所需的代碼區域內正確更改! – sai

+0

不應該在ratingstars.xml中以'@android:id'而不是'@ + id'開頭? –

+0

不,因爲它是ID的xml文件中的第一次出現 – Gooey

回答

1

它看起來像它不是與聽衆被稱爲一個問題,而只是您要應用的自定義android:progressDrawable樣式屬性。我的猜測是,你使用的drawable正在做出意想不到的事情。嘗試從您的RatingBar中刪除style="@style/starBar",看看事情是否按預期工作。如果是這樣,那就是你的問題

+0

如果我使用默認值,它確實有效。現在使用自定義風格來解決中斷的問題是什麼? – Gooey

+0

我會看看有什麼默認的樣子:https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/drawable/ratingbar_full.xml 並繼續挖掘以查看您的繪圖與缺省值的對應關係。例如,做這些看起來像: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/drawable/ratingbar_full_empty。xml https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/drawable/ratingbar_full_filled.xml –

+0

我的繪圖中有這些圖...你認爲_full_empty後綴很重要嗎?我將在一會兒測試這個,會回來的。 – Gooey

2

你應該將ratingstars.xml中的id屬性從"@+id/..."更改爲"@android:id/...",因爲資源是android系統的一部分,並且已經在默認的android進度繪製中定義。

<?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@android:id/background" android:drawable="@drawable/ratingstars_full_empty" /> 
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/ratingstars_full_empty" /> 
    <item android:id="@android:id/progress" android:drawable="@drawable/ratingstars_full_filled" /> 
</layer-list>