私はAndroid TVアプリケーションを使用しており、既に再生されているコンテンツの量を示すプログレスバーを作成する必要があります。私が書いたものがうまくいかなければならないと感じますが、そうではありません。View.setLayoutParams()はレイアウトが完了しても効果がありません
私はプログレスバーのコンテナとしてandroid:orientation="horizontal"
とandroid:weightSum=100
とLinearLayout
を持っている、と実際のプログレスバーが確認プログレスバーがあればそこに描かれていないされていることを確認するために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
と:それ以来、私はこのようpostDelayed
とonResume()
でこれを実行してみた
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であり、画面にも変更はありません。どんなに些細なことが私はここで行方不明ですか?
あなたは 'ProgressBar'ビューを知っていますか? – pskink
@pskink私はそうではありませんでした。私はそれを見て、ホイールを再開発しようとするのを止めるかもしれない、ありがとう! – kjerins
はい「車輪を改革する」は常に悪いです... – pskink