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);
即可完成,而不会篡改您的布局和视图。
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);
即可完成,而不会篡改您的布局和视图。