8

これは他の場所で尋ねられましたが、解決策はうまくいきませんでした。したがって、より多くのコンテキストで再びポーズをとります。問題は、経過時間カウンターのテキスト ビューの更新によって中断される、スクロールする音楽タイトルのテキスト ビューがアクティビティに含まれていることです。

アクティビティ レイアウトにこれら 2 つの TextView ウィジェットがあります (ただし、これらは他のレイアウト コンテナーに含まれています)。

<TextView android:id="@+id/v_current_time"
   android:minWidth="26dp"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center_vertical"
   android:gravity="right|center_vertical"
   android:singleLine="true"
   android:textSize="12sp"
   android:enabled="false"
  />

<TextView android:id="@+id/v_track_title"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textSize="18sp"
   android:textStyle="normal"
   android:singleLine="true"
   android:ellipsize="marquee"
   android:marqueeRepeatLimit="marquee_forever"
   android:scrollHorizontally="true"
   android:focusable="true"
   android:focusableInTouchMode="true"
   android:enabled="true"
/>

音楽のタイトルは (テスト ケースでは) 長いテキスト行に動的に設定されます。次の行で現在の時刻のテキストを更新しないと、一時停止ボタンと再生ボタンをどのように操作しても、音楽のタイトルが永遠にスクロールしてしまいます。

tvCurrentTime.setText(DataFormat.formatTime(progress));

しかし、現在の時刻にテキストを設定すると、音楽のタイトルが停止します。一時停止ボタンを押すと、どういうわけかスクロールがギアに戻りますが、再生を押すと現在の時間が更新され、再び停止します。

このスレッドの提案に従って、次のように、時間テキストの設定とスクロール タイトルの再有効化を組み合わせようとしました。

tvCurrentTime.setText(DataFormat.formatTime(progress));
tvTitle.setEnabled(true);

これは、再起動するたびにスクローラーをリセットする以外に、障害には影響しません。

私が見逃している詳細や、何がうまくいかないかについての他の考えはありますか? どうもありがとう!

4

5 に答える 5

7

マーキーが問題です。TextView (または TextView を含むウィンドウ) がフォーカスを失うと、マーキーが停止してリセットされます (TextView のソースを参照)。ここには3つの可能な解決策があると思います:

  1. android:focusable="false"レイアウト内の他のすべてのビューで設定できます。そうすれば、TextView がフォーカスを失うことはありません。しかし、それはおそらくあなたが望む解決策ではありません。
  2. TextView をサブクラス化して変更onFocusChanged()onWindowFocusChanged()、マーキーが停止してリセットされるのを防ぐことができます。
  3. マーキーの独自の実装を作成します。
于 2011-09-04T11:19:50.277 に答える