abgeschlossen Ich bin auf einer Android-TV-Anwendung arbeiten und benötigen einen Fortschrittsbalken, um zu zeigen, wie vielen Inhalt bereits abgespielt wurde. Ich habe das Gefühl, dass das, was ich geschrieben habe, funktionieren sollte, aber es ist nicht so.View.setLayoutParams() hat keine Wirkung auch nach dem Layout
Ich habe ein LinearLayout
mit android:orientation="horizontal"
und android:weightSum=100
als Container für die Fortschrittsbalken aufgestellt, und die tatsächlichen Fortschrittsbalken sind ein FrameLayout
im Innern des Behälters, mit android:layout_width="0dp"
und android:layout_weight="0"
zu den Fortschrittsbalken stellen Sie sicher, wenn nicht gezogen werden ist kein Fortschritt.
Im Aktivitätscode Ich bin versucht, das Gewicht des Fortschrittsbalkens wie folgt zu ändern:
ViewGroup.LayoutParams lp = progressView.getLayoutParams();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(lp.width, lp.height, progress);
progressView.setLayoutParams(params);
(progressView
, natürlich ist das Objekt zu manipulieren, ich versuche, Fortschrittsbalken, und progress
ist das beabsichtigte neue Gewicht)
Ich habe diesen Code zunächst in der onCreate()
-Methode der Aktivität ausgeführt, bis ich mich daran erinnerte, dass Sie nichts über die Dimensionen einer Ansicht tun können, bis es richtig ausgelegt wurde. Seitdem habe ich versucht, dies in onResume()
mit postDelayed
wie folgt ausgeführt werden:
@Override
public void onResume() {
super.onResume();
progressView.postDelayed(new Runnable() {
@Override
public void run() {
setProgress();
}
}, 1000);
}
und mit einem ViewTreeObserver
wie dies während onCreate()
:
progressView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!progressBarRefreshed) {
setProgress();
}
}
});
und ich habe sogar versucht, den Code als onClick läuft Ereignis, das an eine Schaltfläche in derselben Aktivität angehängt ist (in beiden Fällen ist setProgress()
die Funktion, die die Gewichtsänderung mit dem oben angegebenen Code durchführt). Ich habe überprüft (mit Log-Nachrichten, die ich aus dem Code entfernt, um es besser lesbar), dass die anfängliche Breite 0, Höhe -1 (match_parent
) und Gewicht 0, und dass die neue LayoutParams
Objektbreite 0, Höhe hat - 1 und Gewicht gleich wie ich es eingestellt habe. Aber nach dem setLayoutParams()
Aufruf hat die Ansicht immer noch Gewicht 0 und es gibt auch keine Änderung auf dem Bildschirm. Welche eklatante triviale Sache vermisse ich hier?
kennen Sie die ProgressBar-Ansicht? – pskink
@pskink war ich nicht. Ich werde mir das ansehen und vielleicht aufhören, das Rad neu zu erfinden, danke! – kjerins
ja 'das rad neu erfinden' ist immer schlecht ... – pskink