1

期待どおりにSeekBar動作し、期待する値を返すアプリケーションがあります。ただし、Android 2.xでは、表示がおかしくなります。

ここに画像の説明を入力してください

Android Drawable setLevel();などの他の同様のものを探しました。SeekBarを適切に埋めていませんが、それはカスタムドローアブル用です。そうしないと、この問題の検索用語を思い付くのに苦労しています。

この場合、私がしているのは

SeekBar seekBar = (SeekBar)dialogLayout.findViewById(R.id.my_seek);
seekBar.setProgress(5);
seekBar.setMax(20);

スライダーを動かすと、動かしたSeekBar瞬間にきちんといっぱいになります。

何が起こっているのかについて何か考えはありますか?

4

1 に答える 1

2

これを投稿した後、問題はメソッド呼び出しの順序にある​​ことに気付きました。

正しくない

SeekBar seekBar = (SeekBar)dialogLayout.findViewById(R.id.my_seek);
seekBar.setProgress(5);
seekBar.setMax(20);

正しい

SeekBar seekBar = (SeekBar)dialogLayout.findViewById(R.id.my_seek);
seekBar.setMax(20);
seekBar.setProgress(5);

私の場合、最初にsetProgress(5)を呼び出した場合に収集したものから、システムはドローアブルを設定して進行状況を 5% として表示します。これは 5 / 100 であり、100 がデフォルトの最大値であるためです。

次にsetMax(20)を呼び出すと、値 5 は引き続き有効ですが、drawable は無効になり、バーの 25% (5 / 20) として表示するために再計算されません。

最初にsetMax (20)を実行すると、 setProgress(5)を使用すると、ドローアブルが正しく計算されます。

誰にとっても役立つ場合に備えて、これを Android 2.1、2.2、4.1、および 4.2 でテストしました。

  • Android 2.1 および 2.2 にはこのバグがあり、順序が重要です
  • Android 4.1 および 4.2 にはこのバグはなく、順序は関係ありません

基本的に下位互換性を維持するために、常に最初にsetMax(int)を実行し、次にsetProgress(int)を実行します。

于 2012-12-18T04:21:30.863 に答える