2016-10-12 8 views
0

私はAndroid TVアプリケーションを使用しており、既に再生されているコンテンツの量を示すプログレスバーを作成する必要があります。私が書いたものがうまくいかなければならないと感じますが、そうではありません。View.setLayoutParams()はレイアウトが完了しても効果がありません

私はプログレスバーのコンテナとしてandroid:orientation="horizontal"android:weightSum=100LinearLayoutを持っている、と実際のプログレスバーが確認プログレスバーがあればそこに描かれていないされていることを確認するためにandroid:layout_width="0dp"android:layout_weight="0"で、容器内部のFrameLayoutです進歩ではありません。私はこのようなプログレスバーの重量変更しようとしてるアクティビティコードで

ViewGroup.LayoutParams lp = progressView.getLayoutParams(); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(lp.width, lp.height, progress); 
progressView.setLayoutParams(params); 

progressViewは、当然、私が操作しようとしているプログレスバーオブジェクトであり、かつprogressです

このコードは、最初に、アクティビティのonCreate()メソッドで実行していましたが、ビューの寸法が正しくレイアウトされるまで何もできないことを思い出すまで、このコードを実行していました。

@Override 
public void onResume() { 
    super.onResume(); 
    progressView.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      setProgress(); 
     } 
    }, 1000); 
} 

onCreate()中にこのようなViewTreeObserverと:それ以来、私はこのようpostDelayedonResume()でこれを実行してみた

progressView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     if (!progressBarRefreshed) { 
      setProgress(); 
     } 
    } 
}); 

と私ものonClickようなコードを実行しようとしました同じアクティビティのボタンにアタッチされたイベント(どちらの場合も、上記のコードを使用してウェイトチェンジを実行する関数です)。最初の幅が0、高さが-1(match_parent)、重みが0で、新しいLayoutParamsオブジェクトの幅が0、高さが-1であることを確認しました(ログメッセージを読みやすくするためにコードから削除しました) 1と重量は私が設定したものと同じです。しかし、setLayoutParams()コールの後でも、ビューはまだウェイト0であり、画面にも変更はありません。どんなに些細なことが私はここで行方不明ですか?

+1

あなたは 'ProgressBar'ビューを知っていますか? – pskink

+0

@pskink私はそうではありませんでした。私はそれを見て、ホイールを再開発しようとするのを止めるかもしれない、ありがとう! – kjerins

+1

はい「車輪を改革する」は常に悪いです... – pskink

答えて

0

progressView.requestLayout()を呼び出して、レイアウトパラメータを設定してください。

関連する問題