2016-10-12 4 views
0

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?

+1

kennen Sie die ProgressBar-Ansicht? – pskink

+0

@pskink war ich nicht. Ich werde mir das ansehen und vielleicht aufhören, das Rad neu zu erfinden, danke! – kjerins

+1

ja 'das rad neu erfinden' ist immer schlecht ... – pskink

Antwort

0

Try progressView.requestLayout() nach dem Setzen der Layout-params aufrufen.

Verwandte Themen