Android Studio/ReviewMate

[Android Studio/Kotlin]RatingBar사용법

kangchaewon 2023. 12. 6. 01:05

Layout.xml

<RatingBar
    android:id="@+id/movieRate"
    android:rating="2.0"
    style="@style/Widget.AppCompat.RatingBar.Indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:isIndicator="false"
    android:progressTint="@color/navigation_color_habit"
    android:numStars="5"
    android:scaleX="1"
    android:scaleY="1"
    android:stepSize="0.5" />

 

style : 별점의 크기를 조절

  • 기본

 

  • style="@style/Widget.AppCompat.RatingBar.small"

  • style="@style/Widget.AppCompat.RatingBar.Small"

rating : 초기 별점 갯수

layout : layout은 match로 설정 시 내가 설정한 별점개수로 정해지지 않고 layout크기에 맞춰 별점수가 조절됨 ⇒ wrap_content로 사용 권장

isIndicator : 사용자가 별점 수정 가능 or 불가능

  • false : 설정 가능
  • true : 설정 불가능
  • 기본값 : false

progressTint : 별점의 색 설정

numStars : 별점의 갯수 설정

stepSize : 클릭 시 변경 단위 설정

!! progressTint 설정을 하지 않으면 수정이 안 된 것처럼 보임!!

Activity.kt

lateinit  var ratingbar : RatingBar

//...

ratingbar.setOnRatingBarChangeListener{ratingbar, rating, fromUser->
    ratingbar.rating=rating
    userRateStr = ratingbar.rating.toString()
}

문제점 : default값을 사용하면 오류가 생김

해결 : listener밖에 사용.. userRateStr값이 초기화 되지 않아서 생기는 문제점이었음. listener가 사용되지 않으면 초기화가 되지 않았던 것

ratingbar = binding.movieRate
        ratingbar.setOnRatingBarChangeListener { _, rating, _ ->
             ratingbar.rating = rating
        }
        userRateStr = ratingbar.rating.toString()

setOnRatingBarChangeListener 설정

// 기본 형태
fun onRatingChanged(ratingbar: RatingBar, rating: Float, fromUser: Boolean) {}
// 람다식
ratingbar.setOnRatingBarChangeListener{ratingbar, rating, fromUser-> /*코드*/ }
  • parameters
    • ratingbar : 사용할 ratingbar
    • rating : 사용자가 변경한 별점 개수(Float)
    • fromUser : 사용자가 변경한 값이면 true, 코드를 통해 변경 된 값이면 false
  • 설정 된 rating을 문자열로 변환
    • rating.toString()