问题标签 [onmeasure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
935 浏览

android - 度量的自定义视图未按预期工作

我正在创建一个TextView可以像这样在两端绘制文本的自定义,并且它支持多行,因此文本视图的数量可以减少到一半(我收到一个 lint 警告,抱怨 80 多个视图,并且大多数视图是我布局中的 TextViews,例如在网格布局中添加的名字、姓氏)

请看屏幕截图,这是视图的当前状态

截屏

当高度固定时它会显示文本,我不希望这种行为,因为右边的文本可以是任何长度,它应该将高度包装到所需的高度。这是被覆盖的onMeasure方法

mLayout是一个StaticLayout

如果高度设置为wrap_content它不绘制任何东西。

0 投票
0 回答
112 浏览

android - 在三级可扩展列表视图中缓慢扩展第三级,因为无论视口如何,都必须完全加载第三级

我基于 ngocchung 的项目开始了一个三层可扩展列表视图:

https://github.com/ngocchung/ThreeLevelExpListView

一切正常,除了当我扩大孩子时它相当慢。
检查打印日志后,我发现每次用 20 项展开子项时,都会调用 getChildView() 20 次。在两级 ExpandableListView 中,它只会被调用大约 7 次,因为列表视图一次只能显示 5 个项目。

所以我得出的结论是由于 onMeasure 在 CustomExpListView.java 中限制的视图高度:

此处将高度设置为 20000,这将加载大量项目,然后展开子列表将滞后,因为每个项目都包含图标和两个文本视图。
我尝试将高度从 20000 更改为屏幕高度(5 个项目高度),它会加快扩展速度,但是......列表在第 5 个子项目结束并拒绝向下滚动!
在我看来,因为子列表视图没有滚动条,只有父亲可以滚动,所以子列表视图必须让自己扁平,这样父亲滚动条才能到达子列表的深处。

是否可以将父列表的视图端口与子列表链接?还是有办法限制预加载的子列表项?
提前致谢!

这就是为什么我必须使用三级列表视图

0 投票
1 回答
82 浏览

android - 奇怪的 onMeasure() 行为

我有一个复杂的布局,其中包含以下视图:

注意固定的宽度/高度。
PackPreview我有 onMeasure 功能:

它会稍微调整视图的宽度。问题是当我在低分辨率屏幕上运行它时,它会陷入 onMeasure 调用的无限循环。在控制台中,我看到了很多这样的消息D/pack: 0,true。有趣的是这不会发生在更高分辨率的情况下。有对此有何解释?

UPD:刚刚检查:同样的事情发生在任何地方,但在更高的分辨率上MeasureSpec.getSize返回非零值,所以视觉上看起来不错。

0 投票
1 回答
3111 浏览

java - 在Android中绘制动态自定义视图棋盘

我想在 android studio 中使用画布重写方法 onDraw动态绘制一个 8 x 8 棋盘,我几乎成功了,但我遇到了一个非常烦人的问题。

我已经制作了一个自定义视图,我的目标是使父布局与其子自定义视图的大小相匹配,这样我的棋盘就可以覆盖整个屏幕。(在 XML 文件中,父项和子项都设置为 match_parent)

我希望棋盘也能覆盖屏幕的整个高度。

查看下图,这是我得到的结果,请注意下部区域的巨大间隙,我的目的是垂直拉伸棋盘并使其覆盖整个屏幕以消除该空间。

最终结果棋盘

到目前为止,这是我设法写的,但它没有做我想要的: Class ChessBoard:

onDraw 方法:

类瓷砖:

}
onMeasure 方法:

类 ChessBoard 方法:

}

请注意,上面的 onDraw 方法是在棋盘类中实现的。

我确信这个问题的解决方案在于 o​​nMeasure 方法,我在想如果我增加每个方块的高度,那么棋盘会水平伸展并覆盖整个屏幕?谁能告诉我我做错了什么?

0 投票
1 回答
177 浏览

android - 列表项上的 Android Swipe 菜单无法处理父宽度更改

我正在尝试在 recyclerview 中为我的项目创建一个滑动菜单并最终实现了库:https ://github.com/chthai64/SwipeRevealLayout

实施后乍一看,我认为它正在工作。但是由于某种原因,当父视图/布局(包含片段的框架布局)更改时,它不会更改/测量/布局项目的正确宽度。

该项目只是保持相同的宽度,要么太宽要么太短,这取决于父视图的缩放方式。

我已经从库的自定义视图“SwipeRevealLayout”中包含了 onMeasure 方法。

我在其他地方找到了解决方案的一部分,该项目的所有内容都正确缩放。我用下面的代码替换了 onMeasure 中的所有代码。然而,这个解决方案有一个副作用,项目被完全从屏幕上擦除,而不是在滑动菜单的按钮之前停止。

0 投票
1 回答
131 浏览

android - 为什么只有在方法提取之后才需要 @SuppressLint("WrongCall")

我有这个安卓代码:

没有错误。

但是当我将最后几行提取到私有方法中时,我会收到此警告,需要向私有方法添加抑制注释。

似是而非的方法调用,应该可能调用measure

为什么只有在提取后才需要抑制?

@SuppressLint("WrongCall")

0 投票
1 回答
290 浏览

android - 为什么不 super.onMeasure 或 textView,setText() 再次触发测量通过?

我有一些自定义 FrameLayout 的 android 代码。该代码更改了一些 textView 文本。

我看到更改仅在我调用时生效super.onMeasure(...,...)

我希望它onMeasure()在文本通过代码更改或我调用时自动调用view.invalidate()

为什么后者不影响用户界面?

最后打电话super.onMeasure()比打电话更有效率view.requestLayout()吗?

0 投票
1 回答
172 浏览

android - 在 onResume() 之前动态更改 DialogFragment Max_Height?

我有一个自定义DialogFragment,我想根据其视图的内容大小(包装内容)动态更改其 max_height。

我不希望 的更新max_height导致 UI 跳跃,所以我计划在视图生命周期的早期进行:onMeasure().

但是我怎样才能通知包含dialogor dialogFragment

从对话框片段我可以得到它的托管视图,但我无法注册它的onMeasure()事件。

从视图来看,我可以在onMeasure()方法中编写代码,但我将如何获得对其包含对话框的引用?

我看到了这篇文章,但是随意更改高度onResume()会导致 UI 迟缓(看到 UI 后跳转)

https://stackoverflow.com/a/24213921/311130

0 投票
1 回答
102 浏览

android - how much can a scrollView scroll?

I have a layout with a scrollView inside it.

How can I calculate what's the possible scroll size?

I would think:

(scroll's content desired height) - window.height = (invisible content height)

But how do I get the scroll's content actual desired height?

I can get the scrollView height, which is not what I need.

I saw this post, but I don't get the calaulation.

int diff = (view.getBottom() - (getHeight() + getScrollY()));// Calculate

0 投票
0 回答
23 浏览

android - 调用 setMeasuredDimension 后使用 width 和 height 参数是否正确?

我创建了一个自定义视图,我想在其中绘制一系列正方形,正方形的边取决于分配给视图的尺寸,因此在onMeasure()检查模式和大小后的方法中,我调用 setMeasuredDimension (width, height) . 现在在 setMeasuredDimension 之后执行操作是正确的