【问题标题】:Android: getlayoutParams().width returns -1, and getWidth() returns 0Android:getlayoutParams().width 返回 -1,getWidth() 返回 0
【发布时间】:2016-04-09 23:54:58
【问题描述】:

by 不起作用,我的意思是我在 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 视图中获取视图以更改其宽度?

感谢您的帮助。

【问题讨论】:

    标签: android layout width


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这是我的疏忽。效果很好。
    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多