2012-09-12 55 views
14

我已经添加了一个风格如何设置星星的自定义尺寸中的RatingBar

<style name="myRatingBar" parent="@android:style/Widget.RatingBar"> 
    <item name="android:minHeight">32dp</item> 
    <item name="android:maxHeight">32dp</item> 
</style> 

然而,而不是按比例分我收到冒出星星:

enter image description here

有一种改变星星大小的方法?

回答

16

Android将不会缩放等级栏图标。当您减少minHeightmaxHeight时,android会始终裁剪照片上显示的图标。解决方法是似乎是唯一的解决方案是为具有所需尺寸的恒星提供自己的图标,并将minHeightmaxHeight设置为图标的大小。

+2

如果你的应用程序的不同部分需要不同的星号?你需要新的资产吗?怎么样支持不同尺寸的平板电脑?现在我有8套星星支持?图像应该缩放到视图,就像ImageView一样,而不是相反。 –

+0

好吧,我知道问题被问到很长时间了,但我有一点相关的事情,准确地说,标准星形图标的大小是什么_ @ android:style/Widget.RatingBar“_ and small stars style _”? android:attr/ratingBarStyleSmall“_你知道这些图标在哪里吗? – Tafari

+1

我创建了一个方法,你可以为RatingBar设置自己的图像,并为星形图标设置一个自定义颜色覆盖。您的自定义尺寸和高度在实际布局尺寸没有任何异常情况下,每个星级的填充也可以修改。 http://stackoverflow.com/a/37460679/1299158 – box

2

Look at this小样式的自定义评分栏。

我认为你必须使用自定义风格的评级栏。 Here就是这个例子。

+0

小样式太小了。我如何设置默认星星的大小不同? –

+0

@MarcinS。我添加了另一个链接 –

4

//你也可以尝试

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

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

编号:/android-sdk/platforms/android-10/data/res/values/styles.xml

<style name="Widget.RatingBar"> 
     <item name="android:indeterminateOnly">false</item> 
     <item name="android:progressDrawable">@android:drawable/ratingbar_full</item> 
     <item name="android:indeterminateDrawable">@android:drawable/ratingbar_full</item> 
     <item name="android:minHeight">57dip</item> 
     <item name="android:maxHeight">57dip</item> 
     <item name="android:thumb">@null</item> 
    </style> 

    <style name="Widget.RatingBar.Indicator"> 
     <item name="android:indeterminateOnly">false</item> 
     <item name="android:progressDrawable">@android:drawable/ratingbar</item> 
     <item name="android:indeterminateDrawable">@android:drawable/ratingbar</item> 
     <item name="android:minHeight">38dip</item> 
     <item name="android:maxHeight">38dip</item> 
     <item name="android:thumb">@null</item> 
     <item name="android:isIndicator">true</item> 
    </style> 

    <style name="Widget.RatingBar.Small"> 
     <item name="android:indeterminateOnly">false</item> 
     <item name="android:progressDrawable">@android:drawable/ratingbar_small</item> 
     <item name="android:indeterminateDrawable">@android:drawable/ratingbar_small</item> 
     <item name="android:minHeight">14dip</item> 
     <item name="android:maxHeight">14dip</item> 
     <item name="android:thumb">@null</item> 
     <item name="android:isIndicator">true</item> 
    </style> 
+0

好的。每当我将minHeight和maxHeight更改为较小的值时,我会收到星号,如附图所示。看起来图片没有缩放,我必须通过提供具有所需大小的我自己的图标来自定义评级栏。 –

4

你解决了你的问题。但这可能有助于其他人。

我有同样的问题。我得到的所有解决方案不适用于多种屏幕尺寸。花了几个小时后,我用以下解决方案结束

只需在运行时获取可绘制的高度,并将其设置为RatingBar。这里是示例代码。

Drawable starDrawable = getResources().getDrawable(R.drawable.YOUR_IMAGE); 
int height = starDrawable.getMinimumHeight(); 
LayoutParams params = (LayoutParams) ratingBar.getLayoutParams(); 
params.height = height; 
ratingBar.setLayoutParams(params); 
+0

Thx bro,最好的解决方案;) –

15

另一种方法是缩放控件:

android:scaleX="0.5" 
android:scaleY="0.5" 
+0

哈克但工作:)谢谢! – cylon

0

这不完全是一个答案,但我想显示的替代品。使用一个名为Iconify的库,它允许您在android应用上使用可缩放的矢量图标,并且使用简单的方法可以创建带有图标的真棒评级栏。

的方法

public static String montarEstrellasValoracion(float valoration,int starSize) { 
    String result=""; 
    float cont=1f; 

    for(float i=1f;i<=valoration;i++){ 
     if(valoracion==0){ 
      break; 
     } 
     cont=i; 
     if((cont+0.5f)>=(valoration) && valoracion!=5f){ 
      result+="{fa-star "+starSize+"dp} "; 
      result+="{fa-star-half-o "+starSize+"dp} "; 
      cont++; 
      break; 
     }else if((cont+0.5f)<(valoration) && (cont+1f)>(valoration) && valoration!=5f){ 
      result+="{fa-star "+starSize+"dp} "; 
      result+="{fa-star "+starSize+"dp} "; 
      cont++; 
      break; 
     } 

     if(cont<=5){ 
      result+="{fa-star "+starSize+"dp} "; 
     } 

    } 

    for(float j=cont;j<5f;j++){ 
     result+="{fa-star-o "+starSize+"dp} "; 
    } 

    if(valoration==0){ 
     result+="{fa-star-o "+starSize+"dp}"; 
    } 

    return result; 
} 

,然后在onCreate方法:

IconTextView valoracion = (IconTextView)item.findViewById(R.id.id_icon_textview); 

valoracion.setText(montarEstrellasValoracion(valoration,15)); valoracion.setTextColor(Color.parseColor("#000");

图标是从另一个真棒网站叫Font Awesome

合这对任何人都有帮助!

0
   <RatingBar 
       android:id="@+id/AVL_rating" 
       style="?android:attr/ratingBarStyleSmall" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/ASD_cardlayout" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:layout_marginTop="@dimen/_10sdp" 
       android:isIndicator="true" 
       android:numStars="5" 
       android:rating="5.0" 
       android:secondaryProgressTint="@color/clr_red" 
       android:stepSize="1.0" />