Answers:
默认的RatingBar小部件是sorta'lame。
?android:attr/ratingBarStyleIndicator
除了?android:attr/ratingBarStyleSmall
您已经熟悉的“ ” 之外,该资源还引用了样式“ ” 。 ratingBarStyleIndicator
略小一些,但仍然很丑陋,评论指出这些样式“不支持交互”。
您可能最好自己滚动一下。http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/上有一个外观不错的指南,介绍了如何执行此操作。(我自己还没有做过,但是会在一天内左右尝试。)
祝好运!
ps抱歉,本来要发布指向源的链接供您浏览,但我是新用户,并且不能发布多个URL。如果您通过源代码树进行挖掘,它位于frameworks / base / core / java / android / widget / RatingBar.java
如何粘贴此处 给出的代码...
第1步。您需要自己的星级星级res/drawable
...
步骤2在res/drawable
您需要ratingstars.xml
以下步骤...
<?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/star_empty" />
<item android:id="@android:id/secondaryProgress"
android:drawable="@drawable/star_empty" />
<item android:id="@android:id/progress"
android:drawable="@drawable/star" />
</layer-list>
步骤3在res/values
您需要styles.xml
以下步骤...
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="foodRatingBar" 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>
</resources>
步骤4在您的布局中...
<RatingBar
android:id="@+id/rtbProductRating"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:numStars="5"
android:rating="3.5"
android:isIndicator="false"
style="@style/foodRatingBar"
/>
只需使用:
android:scaleX="0.5"
android:scaleY="0.5"
根据需要更改比例因子。
为了缩放而不在左侧创建填充,请添加
android:transformPivotX="0dp"
codeandroid:scaleX="0.75" android:scaleY="0.75" android:layout_marginRight="-25dp"
android:layout_height="40dp"
无需将侦听器添加到中?android:attr/ratingBarStyleSmall
。只需添加
android:isIndicator=false
,它将捕获点击事件,例如
<RatingBar
android:id="@+id/myRatingBar"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:isIndicator="false" />
OS的一个小工具
<RatingBar
android:id="@+id/ratingBar"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
应用这个。
<RatingBar android:id="@+id/indicator_ratingbar"
style="?android:attr/ratingBarStyleIndicator"
android:layout_marginLeft="5dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
我发现了比上面的解决方案简单的解决方案,而且比滚动自己的解决方案更容易。我只是创建了一个小的评分栏,然后向其添加了onTouchListener。从那里,我计算点击的宽度并从中确定星星的数量。使用过几次后,我发现的唯一怪癖是,除非我将其包围在LinearLayout中(在编辑器中看起来是正确的,但在设备中看起来是正确的),否则绘制小等级栏的结果并不总是在表格中正确显示。无论如何,在我的布局中:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RatingBar
android:id="@+id/myRatingBar"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5" />
</LinearLayout>
在我的活动中:
final RatingBar minimumRating = (RatingBar)findViewById(R.id.myRatingBar);
minimumRating.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View view, MotionEvent event)
{
float touchPositionX = event.getX();
float width = minimumRating.getWidth();
float starsf = (touchPositionX / width) * 5.0f;
int stars = (int)starsf + 1;
minimumRating.setRating(stars);
return true;
}
});
我希望这可以帮助其他人。绝对比自己画画容易(尽管我发现这也可行,但我只想轻松使用星星)。
ratingBarStyleSmall
星星真的太小而无法使用。我想我必须自己动手才能获得中等大小的恒星。
<RatingBar
android:rating="3.5"
android:stepSize="0.5"
android:numStars="5"
style = "?android:attr/ratingBarStyleSmall"
android:theme="@style/RatingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
// if you want to style
<style name="RatingBar" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/colorPrimary</item>
<item name="colorControlActivated">@color/colorAccent</item>
</style>
//将这些行添加到小评分栏
style = "?android:attr/ratingBarStyleSmall"
尽管Farry的答案有效,但对于Samsung设备,RatingBar随机采用蓝色,而不是我定义的蓝色。所以用
style="?attr/ratingBarStyleSmall"
代替。
完整的代码如何使用它:
<android.support.v7.widget.AppCompatRatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?attr/ratingBarStyleSmall" // use smaller version of icons
android:theme="@style/RatingBar"
android:rating="0"
tools:rating="5"/>
<style name="RatingBar" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/grey</item>
<item name="colorControlActivated">@color/yellow</item>
<item name="android:numStars">5</item>
<item name="android:stepSize">1</item>
</style>
小型等级栏的最佳答案
<RatingBar
android:layout_width="wrap_content"
style = "?android:attr/ratingBarStyleSmall"
android:layout_height="wrap_content" />
使用此代码
<RatingBar
android:id="@+id/ratingBarSmalloverall"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="30dp"
android:isIndicator="false"
android:numStars="5" />
我得到的最好的答案
<style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:minHeight">15dp</item>
<item name="android:maxHeight">15dp</item>
<item name="colorControlNormal">@color/white</item>
<item name="colorControlActivated">@color/home_add</item>
</style>
这样的用户
<RatingBar
style="?android:attr/ratingBarStyleIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="false"
android:max="5"
android:rating="3"
android:scaleX=".8"
android:scaleY=".8"
android:theme="@style/MyRatingBar" />
通过使用scaleX和scaleY值增加/减小大小
将以下代码用于带有onTouch事件的小型评分栏
enter code here
<RatingBar
android:id="@+id/ratingBar"
style="?android:ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="false"
android:rating="4"
android:stepSize="0.5" />
经过大量研究,我发现减小自定义等级栏的最佳解决方案是获得某些尺寸的可绘制进度条,如下所述:
xxhdpi-48 * 48像素
xhdpi-36 * 36像素
hdpi-24 * 24像素
在样式上,将所有分辨率的minheight和maxheight设置为16 dp。
让我知道这是否不能帮助您获得最佳的小尺寸等级栏,因为我发现这些尺寸非常兼容并且等同于ratingbar.small样式属性。