Android: getlayoutParams().width returns -1, and getWidth() returns 0

Android: getlayoutParams().width returns -1, and getWidth() returns 0

By不行,我的意思是我在ViewHolder中看不到它。 getWidth() returns 值为 0.0.

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

我有一个视图,用于显示特定 class 某人的距离,设置如下:

            <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 viewholder 中的视图改变其宽度?

感谢您的帮助。

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

在您的情况下,为了显示进度,您应该只使用 ProgressBar 和/或使用带剪裁的可绘制对象或其他一些方式来显示进度(有 lot 不同的选项)。

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