我正在使用Android TV应用,需要制作进度条以指示已经播放了多少内容。我觉得我所写的应该是有效的,但它不是。
我有LinearLayout
android:orientation="horizontal"
和android:weightSum=100
作为进度条的容器,实际进度条是容器内的FrameLayout
,android:layout_width="0dp"
和android:layout_weight="0"
,以确保在没有任何进展的情况下不会绘制进度条。
在活动代码中我试图改变进度条的权重,如下所示:
ViewGroup.LayoutParams lp = progressView.getLayoutParams();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(lp.width, lp.height, progress);
progressView.setLayoutParams(params);
(progressView
,当然是我试图操纵的进度条对象,而progress
是预期的新权重)
我最初在活动的onCreate()
方法中运行此代码,直到我记得在视图布局正确之前,您无法对视图的维度进行任何操作。从那时起,我尝试使用onResume()
postDelayed
在@Override
public void onResume() {
super.onResume();
progressView.postDelayed(new Runnable() {
@Override
public void run() {
setProgress();
}
}, 1000);
}
中运行此功能:
ViewTreeObserver
在onCreate()
期间和progressView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!progressBarRefreshed) {
setProgress();
}
}
});
这样的setProgress()
:
match_parent
我甚至尝试将代码作为附加到同一活动中的按钮的onClick事件运行(在这两种情况下LayoutParams
都是使用上面发布的代码执行权重更改的函数)。我已验证(我从代码中删除了日志消息以使其更具可读性)初始宽度为0,高度为-1(setLayoutParams()
)且权重为0,并且新{{对象的宽度为0,高度为-1,权重等于我设置的宽度。但是在{{1}}调用之后,视图仍然具有权重0并且屏幕上也没有变化。我在这里错过了什么明显无足轻重的事情?
答案 0 :(得分:0)
设置布局参数后尝试调用progressView.requestLayout()
。