Android:getlayoutParams()。width返回-1,getWidth()返回0

时间:2016-04-09 15:44:52

标签: android layout width

由于没有工作,我的意思是我无法在ViewHolder中看到它。 getWidth()返回值0.0。

编辑 - 我无法看到视图的原因是获取宽度的原始调用返回0。

我有一个视图,用于显示某人所在的特定课程的范围,设置如下:

            <View
            android:id="@+id/timerBar"
            android:layout_width="match_parent"
            android:layout_height="4dp"
            android:background="@color/colorPrimaryDark" />

在onBindViewHolder方法中,我正在执行以下操作 -

获取新宽度和当前布局

    int width = (int) (holder.timerBar.getLayoutParams().width * ((float)time-start)/((float)end-start));
    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) holder.timerBar.getLayoutParams();

设置布局的宽度,并设置视图的布局 -

holder.timerBar.setLayoutParams(lp);
holder.timerBar.requestLayout();

调用requestLayout()显然会导致视图刷新,但它对我没用。

有人可以建议如何在recyclerview视图中获取视图以更改其宽度吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

除非您知道自己在做什么,否则请不要手动设置布局参数。 在recyclerview中测量和布局对象是不同的,因为它是由布局管理器完成的,你不应该干扰它。

在您的情况下,为了显示进度,您应该使用ProgressBar和/或使用带裁剪的绘图或其他方式来显示进度(有一个不同的批次选项)。

然后,您只需致电progress.setProgress(50);即可完成,而不会篡改您的布局和视图。