RatingBarを使ってみた

iTunesから抽出したSQLiteデータベースにはiTunesのレートの値を入れてある。

iPodのように、プレイヤー側でセットして、iTunesに反映というのは考えていないが、表示だけはできるようにすることを考えているのでデータベースに入れてある。

iTunesにアクセスするプログラムをAppleScriptやCOMで書いたことのある人なら知っていると思うのだけれども、あのiTunesのレートは5段階で表示しているけれども、内部のデータは5段階で持っていない。0~100までの整数値で持っているのだ。★一つが20に相当していて、★5つの曲のレートの値は100になっている。

これをAndroidで表示するのに、そのままRatingBarを使おうとした。見た目がそのままだから問題ないだろうと思った。

RatingBarのXMLレイアウトでの設定値には、numStartsとstepSizeという項目がある。iTunesに合わせるなら、これを5と20にすればそのままデータベースの値が使えて変換もしないで済むだろうと単純に考えた。

デフォルトのサイズでは動いているように見えた。でも、あまりにも大きさが大きすぎる。そんなに自己主張して欲しいパーツではない。で、調べると、style=”?android:attr/ratingBarStyleSmall”という設定を追加するとかなり小さく表示できるようだった。3段階設定できるうちの一番小さい大きさになる設定がこれ。

しかし、このスタイルを設定して動かすと、すべての項目で5つ星になってします。カーソル値をデバッグ出力するとデータベースの値は取れている。悩んだあげくに、stepSizeを1にして、setRatingメソッドで設定する値を20で割った値に変えた。すると想定通り動いた。

stepSizeが1でないと動かないのか?仕様?

まぁ、動いたからいいし、分かってしまえば問題にはならないからいいのだが、そうなると、stepSizeの存在意義がないようにも思えてきて納得がいかない今日この頃。

コメント