22

そのため、新しいアイコンで評価バーを作成しましたが、実装すると、星が出血しているように見えます。添付を参照してください。

評価バー

スタイル、評価 xml、およびそれらがレイアウトにどのように実装されているかを次に示します。

スタイル:

<style name="GoldRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@drawable/gold_ratingbar</item>
    <item name="android:indeterminateDrawable">@drawable/gold_ratingbar</item>
    <item name="android:thumb">@null</item>
    <item name="android:isIndicator">true</item>
</style>

評価 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/rating_star_icon_off" />
    <item android:id="@+android:id/secondaryProgress" android:drawable="@drawable/rating_star_icon_half" />
    <item android:id="@+android:id/progress" android:drawable="@drawable/rating_star_icon" />
</layer-list>

レイアウト:

<TextView

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:text="Overall rating"
    android:textSize="16sp"
    android:textStyle="bold" />

<RatingBar
    android:id="@+id/review_overall_rating"
    style="@style/GoldRatingBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="6dp"
    android:layout_marginLeft="6dp"
    android:rating="3" />

<TextView
    android:id="@+id/review_rating_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:text=""
    android:textStyle="bold" />

誰が私がどこで間違っているかを見ることができますか?

4

4 に答える 4

24

私は同様のケースがあり、受け入れられた回答はすべての画面サイズで解決するわけではありません。実際、解決策は非常に簡単です。「両側に2つの透明ピクセル」を使用している.png画像にパディングを追加するだけです。

Androidが星の画像の最後の行を繰り返しているため、出血が発生するため、この行を透明にするだけです

于 2015-02-07T00:20:06.480 に答える
7

私は同じ問題に直面していました。

私の場合、blank_star.png高さは17dpなので、装着android:layout_height="17dp"RatingBarて問題は解決しました。以下のコードを試してください:-

<RatingBar
    android:id="@+id/rating"
    style="@style/rating_bar"
    android:layout_width="wrap_content"
    android:layout_height="17dp"
    android:layout_marginRight="5dp"
    android:isIndicator="true"
    android:numStars="5"
    android:stepSize="1.0" />

スタイル/rating_bar.xml

<style name="rating_bar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/rating_bar_full</item>
    <item name="android:minHeight">18dip</item>
    <item name="android:maxHeight">18dip</item>
</style>

ドローアブル/rating_bar_full

<?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/ratingbar_full_empty"/>
    <item
        android:id="@+android:id/secondaryProgress"
        android:drawable="@drawable/ratingbar_full_empty"/>
    <item
        android:id="@+android:id/progress"
        android:drawable="@drawable/ratingbar_full_filled"/>

</layer-list>

drawable/ratingbar_full_empty

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/blank_star" android:state_pressed="true" android:state_window_focused="true"/>
    <item android:drawable="@drawable/blank_star" android:state_focused="true" android:state_window_focused="true"/>
    <item android:drawable="@drawable/blank_star" android:state_selected="true" android:state_window_focused="true"/>
    <item android:drawable="@drawable/blank_star"/>

</selector>

drawable/ratingbar_full_filled.xml

<item android:drawable="@drawable/filled_star" android:state_pressed="true" android:state_window_focused="true"/>
<item android:drawable="@drawable/filled_star" android:state_focused="true" android:state_window_focused="true"/>
<item android:drawable="@drawable/filled_star" android:state_selected="true" android:state_window_focused="true"/>
<item android:drawable="@drawable/filled_star"/>

于 2014-04-30T11:42:01.870 に答える
7

まだ答えを探していて、画像をトリミングしたくないすべての人のために:android:minHeight="0dp"助けてくれました

更新します。なぜ機能しているのですか?ほとんどのビュー コンポーネントには、Google のアクセシビリティ/ユーザビリティ ガイドラインに従うためのデフォルトの最小サイズがあります。そして、前述のように、最後の 1 ~ 2 ピクセルを繰り返すことRatingBarで、空のスペース (自分のリソースと の差分minHeight) を埋めようとしているようです (個人的には、そのような決定の理由がわかりません)。したがって、を設定するとandroid:minHeight="0dp"RatingBarリソースの高さでコンテンツがラップされます。

于 2018-08-27T13:41:14.227 に答える
1

スター画像の最後の行が繰り返されるため、にじみが発生します。これは、RatingBar のサイズを下にあるドローアブルと完全に一致するように設定することで修正できます。

RatingBar は、基になるドローアブルのサイズを検査しません。したがって、これを自分で行う必要があります。画面密度によってアセットのサイズが異なる場合があるため、xml を使用してこれを行うのは難しい場合があります。さらに、UX 担当者は、xml ディメンションを更新せずにアセットを変更する可能性があります。

解決策: ドローアブルのサイズをチェックする RatingBar を作成します。下記参照

public class RatingBar extends android.widget.RatingBar {
    private Drawable starDrawable;

    public RatingBar(Context context) {
        this(context, null);
    }

    public RatingBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        starDrawable = getResources().getDrawable(
            R.drawable.your_drawable, context.getTheme());
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Make sure to account for padding and margin, if you care.
        // I only cared about left padding.
        setMeasuredDimension(starDrawable.getIntrinsicWidth() * 5 
            + getPaddingLeft(), starDrawable.getIntrinsicHeight());
    }
}
于 2015-06-14T05:13:07.570 に答える