Die Einstellung von TextView stoppt das Lauftext-Scrollen anderer TextView

8

Dies wurde anderswo gefragt, aber die Lösung hat nicht für mich funktioniert. Also stell es wieder mit mehr Kontext auf. Das Problem besteht darin, dass eine Aktivität eine Textansicht mit Scroll-Musiktiteln enthält, die durch eine Textanzeige für die verstrichene Zeit der Aktualisierung unterbrochen wird.

Ich habe diese beiden TextView-Widgets in meinem Aktivitätslayout (obwohl sie von anderen Layout-Containern umfasst sind).

%Vor%

Der Musiktitel wird dynamisch (im Testfall) auf eine lange Textzeile gesetzt. Wenn ich den Text für die aktuelle Zeit nie mit der folgenden Zeile aktualisiere, wird der Musiktitel fröhlich für immer weiterlaufen, egal wie ich mit meinen Pause- und Wiedergabeschaltflächen interagiere.

%Vor%

Aber wenn ich den Text für die aktuelle Zeit einstelle, stoppt der Musiktitel. Durch Drücken der Pausetaste wird das Zurückscrollen in Gang gesetzt, aber durch Drücken von Play wird die aktuelle Zeit aktualisiert und gestoppt.

Nach dem Vorschlag in diesem Thread habe ich versucht, die Einstellung des Zeittextes mit der erneuten Aktivierung des Bildlauf-Titels wie folgt zu koppeln:

%Vor%

Dies hat keine Auswirkung auf den Fehler, außer dass der Scroller bei jedem Neustart zurückgesetzt wird.

Gibt es ein Detail, das mir fehlt, oder irgendwelche anderen Gedanken darüber, was schief gehen könnte? Vielen Dank!

    
Groovee60 03.09.2011, 17:43
quelle

3 Antworten

7

Marquee ist problematisch. Wenn TextView (oder das Fenster, das die TextView enthält) den Fokus verliert, wird der Laufrahmen gestoppt und zurückgesetzt (siehe Quellen für TextView). Ich schätze, Sie haben hier 3 mögliche Lösungen:

  1. Sie können android:focusable="false" in allen anderen Ansichten in Ihrem Layout festlegen. Auf diese Weise sollte Ihr TextView den Fokus nicht verlieren. Aber das ist wahrscheinlich nicht die Lösung, die Sie wollen.
  2. Sie können TextView ableiten und onFocusChanged() und onWindowFocusChanged() ändern, um zu verhindern, dass das Markierungsfeld gestoppt und zurückgesetzt wird.
  3. Erstellen Sie Ihre eigene Implementierung von "crude".
Tomik 04.09.2011 11:19
quelle
6

Es gibt eine andere Möglichkeit, dies zu lösen, ohne alle RelativeLayout zu entfernen.

Sie können den TextView-Rahmen einfach mit einem LinearLayout innerhalb des RelativeLayout als Container umschließen.

    
Patrick Chan 05.02.2014 06:55
quelle
2

(Kommentar zu einer Antwort voranstellen) Stellt sich heraus, dass die obigen TextView-XML-Konfigurationen ohne Laufzeitänderungen funktionieren (um resetable = true oder was auch immer wiederherzustellen) WENN ich die RelativeLayouts in meiner Layoutdatei loslasse und sie durch LinearLayouts ersetze . Und keiner der obigen Vorschläge 1 oder 2 (ich bin mir nicht sicher über 3) funktioniert, wenn ich es nicht tue. Das scheint ein subtiler und falscher undokumentierter Fehler von RelativeLayout zu sein.

    
Groovee60 10.03.2015 00:05
quelle

Tags und Links