に関する問題[EDIT 3] - ワーキング今すぐ @sJyの提案に、以下のようにコードを変更:RatingBar - 評価に基づいて変更星の色 - ロリポップ
LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar)); // Partial star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(0)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorPrimary));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
layerDrawable.getDrawable(1).setTint(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar));
layerDrawable.getDrawable(2).setTint(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar));
layerDrawable.getDrawable(0).setTint(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorPrimary));
} else {
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar), PorterDuff.Mode.SRC_ATOP);
}
をI AppCompatRatingBarを使用してユーザーが選択した評価を表示しています。このコードはKitKatとMarshmallowではうまく動作しますが、Lollipopでは星の色は変わりません。
イメージと以下のコードを参照してください: - 4つ星
ロリポップ -
キットカットを3つ星
- 2つ星マシュマロをクリック
コード:
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
if ((int) rating == 1) {
ratingBar.setNumStars(5);
ratingBar.setProgress(1);
ratingBar.setRating(1);
LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar));
}else {
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorOneStar), PorterDuff.Mode.SRC_ATOP);
}
textViewRating.setText(getResources().getString(R.string.worst));
} else if ((int) rating == 2) {
ratingBar.setNumStars(5);
ratingBar.setProgress(2);
ratingBar.setRating(2);
LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorTwoStars));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorTwoStars));
}else {
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorTwoStars), PorterDuff.Mode.SRC_ATOP);
}
textViewRating.setText(getResources().getString(R.string.poor));
} else if ((int) rating == 3) {
ratingBar.setNumStars(5);
ratingBar.setProgress(3);
ratingBar.setRating(3);
LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorThreeStars));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorThreeStars));
}else {
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorThreeStars), PorterDuff.Mode.SRC_ATOP);
}
textViewRating.setText(Html.fromHtml(getResources().getString(R.string.onetime_watch_one_line)));
} else if ((int) rating == 4) {
ratingBar.setNumStars(5);
ratingBar.setProgress(4);
ratingBar.setRating(4);
LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorFourStars));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorFourStars));
}else {
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorFourStars), PorterDuff.Mode.SRC_ATOP);
}
textViewRating.setText(getResources().getString(R.string.good));
} else if ((int) rating == 5) {
ratingBar.setNumStars(5);
ratingBar.setProgress(5);
ratingBar.setRating(5);
LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorFiveStars));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorFiveStars));
}else {
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorFiveStars), PorterDuff.Mode.SRC_ATOP);
}
textViewRating.setText(getResources().getString(R.string.excellent));
}
}
});
[EDIT 1] Sohailの提案@を1としてRatingBarをクリックしたとき、私は
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(0)), ContextCompat.getColor(PostMovieReviewActivity.this, R.color.colorPrimary));
を追加し、それが消えます。明確にするために、私はRatingBarに背景色を追加しました。
まだ解決法はありません後
前
!それは場合に役立ちますAppCompatRatingBar XMLを追加
[EDIT 2] は、:
<android.support.v7.widget.AppCompatRatingBar
android:id="@+id/ratingBar"
style="?android:attr/ratingBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="8dp"
android:background="@color/colorFiveStars"
android:isIndicator="false"
android:max="5"
android:numStars="5"
android:stepSize="1" />
は、任意の変更によってスタイル、問題の原因ですか?
を使用あなたはRatingBar
に使用する色を使用してColorStateを作成します。 '。これを参照してください:http://stackoverflow.com/questions/39060888/autocompletetextview-strange-behaviour-in-ollipop-device – Ironman
@アイロンマン、それは.. –
あなたが使用しているライブラリのバージョンをサポートしていますか? – sJy