我在RatingBar
项目的应用程序中实现了自定义ListView
。
自定义样式 ratingbar_red.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_off" />
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/star_on" />
<item android:id="@android:id/progress" android:drawable="@drawable/star_on" />
</layer-list>
这是ListItem布局的一部分:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="15dp" >
<RatingBar
android:id="@+id/li_company_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginBottom="1dp"
android:isIndicator="true"
android:numStars="5"
android:progressDrawable="@drawable/ratingbar_red"
android:stepSize="1" />
<Button
android:id="@+id/li_company_callbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginLeft="40dp"
android:contentDescription="@string/ContentDescription"
android:drawableLeft="@drawable/phone_icon"
android:drawablePadding="5dp"
android:onClick="callbtn_Click"
android:text="@string/CallButton"
android:focusable="false"
android:focusableInTouchMode="false" >
</Button>
</LinearLayout>
它可以工作,但是当设置评级时,我会得到一些奇怪的图像伪像;粉红色星星下面有2条垂直线出现在我的视线中:
这是 star_on.png
star_off.png 看起来没问题,如果评分== 0,则不显示这些行。
我是android初学者,无法理解问题所在。
答案 0 :(得分:16)
尝试在xml布局中为RatingBar
提供高度,如下所示:
android:layout_height="30dp"
30dp或任何适合你的东西..
答案 1 :(得分:3)
我有这个问题,看起来像被拉伸的自定义星形图像的底边。您不必设置评级栏标签的layout_height。您可以在额定条上设置最小/最大高度(与图像高度相同)。
我的样式xml示例。
<style name="GoldRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:minHeight">@dimen/rating_bar_height</item>
<item name="android:maxHeight">@dimen/rating_bar_height</item>
</style>
Dimens.xml
<dimen name="rating_bar_height">11dp</dimen>
该值应与使用的drawable的值相匹配。 11像素高的图像,所以rating_bar_height设置为11dp。
答案 2 :(得分:2)
另一个简单的解决方案是使用像photoshop这样的图像编辑器在星形图像中留下一行空像素。然后,评级栏中重复或拉伸的像素行将为空。这种方法解决了我的问题。
答案 3 :(得分:2)
我以另一种方式解决了这个问题。我拿自定义的星形png,并在图像编辑器中添加透明线到图像的底部。垂直线条的问题在所有屏幕上都消失了!
答案 4 :(得分:2)
它是一个Icon设计问题。这里的问题是图标周围的填充。如果要创建自定义星形图标,请确保在星形和它所在的页面边界之间留下一些填充空间。
如果您不确定如何操作,请尝试Android Asset Studio。您可以看到类似“Padding around Optical Icon”之类的内容,请勿将其保持为0 dip。
答案 5 :(得分:2)
每个人都在暗示某些事情,但没有任何机构试图解释为什么会这样。我现在要试着解释一下。当然,只有在您尝试自定义评级栏图像时才会发生这种情况。
想象一下,我们有大小为72x72像素的自定义图像,这是我们XXXHDPI的资源 - (它是4倍)。
这就是为什么如果你将评级栏高度设置为固定大小,一切都可以,但也可以。但是也可以。所有这些都取决于您的自定义图像大小。
我认为有一种解决方案适用于所有可能的场景,这是:
注意:在整个对话中,我们讨论的是不在px中的dp(密度像素),因为如果我们在每个res文件夹中提供所有这些图像资源,我们将有机会使用dp而不是px。我希望最后一句话清楚明白。
编辑:另一种可能的方法是在自定义图像的底部留下一些小填充(空白空间),可能是1px或2px。在这种情况下,RatingBar视图不会显示那些人工制品像素,因为它们将从自定义图像的填充部分中获取,实际上它只是空(透明)像素。我个人认为,这不是最好的方法,因为图像填充将在RatingBar和布局内的其余视图之间创建一些空间(填充)。在这种情况下,您将无法完全控制视图空间,因为一些小部分已在自定义图像内部进行了硬编码(那些2 px填充)。
答案 6 :(得分:1)
在Photoshop中的图像明星中只有2个像素填充。 在xml中填充不起作用,只需在photoshop中填充星形图像。 它的工作非常好。
答案 7 :(得分:0)
我通过减少“layout_height”修复了同样的问题,因为我的图像高度小于layout_height中的高度。
答案 8 :(得分:0)
同样的问题。就我而言
将自定义星形图像放在/ Drawable文件夹中
并设置"android:layout_height="30dip"
工作正常!!
答案 9 :(得分:0)
由于可绘制矢量,我一直在观察该问题。 一旦添加了相应的png图像,它就会开始工作。 将此添加为答案,因为它可能对面临相同问题的人有所帮助。