问题标签 [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.
android - 自定义视图的onMeasure:如何根据高度获取宽度
我的问题的先前版本太罗嗦了。人们无法理解它,所以下面是一个完整的重写。如果您对旧版本感兴趣,请查看编辑历史记录。
RelativeLayout
父母将sMeasureSpec
发送到其子视图的onMeasure
方法,以查看孩子想要多大。这发生在几个通道中。
我的自定义视图
我有一个自定义视图。随着视图内容的增加,视图的高度也会增加。当视图达到父级允许的最大高度时,任何其他内容的视图宽度都会增加(只要wrap_content
选择了宽度)。因此,自定义视图的宽度直接取决于父级所说的最大高度必须是什么。
(不和谐的)亲子对话
onMeasure
通过 1
父母告诉我的RelativeLayout
观点,“你可以是任意宽度和 900
任意高度。 600
你说什么?”
我的观点是,“嗯,在那个高度,我可以容纳宽度为 的所有东西100
。所以我将采用宽度100
和高度600
。”
onMeasure
通过 2
家长告诉我的RelativeLayout
观点,“你上次告诉我你想要一个宽度100
,所以让我们将它设置为一个精确的宽度。现在,基于这个宽度,你想要什么样的高度?任何高度都可以 500
。”
“嘿!” 我的看法答复。“如果你只给我的最大高度500
,那就100
太窄了。我需要一个宽度来200
达到那个高度。但是没关系,随你的便吧。我不会违反规则(还......)。我将采用宽度100
和高度500
。"
最后结果
RelativeLayout
父级为视图分配100
宽度和500
高度的最终尺寸。这对于视图来说当然太窄了,并且部分内容被剪裁了。
“叹息,”我的看法是。“为什么我的父母不让我变宽?空间很大。也许 Stack Overflow 上的人可以给我一些建议。”
android - 如何在 onMeasure 中获取自定义 ViewGroup 高度
这是onMeasure()
在 CustomView 上extend FrameLayout
。经过调查onMeasure()
,高度大小始终为零。我怎么知道这个 CustomView 的高度大小,以便以后操作子视图。
android - Android 视图调整大小和 WindowManager:子视图放置期间不需要的过渡
ViewGroup
在父视图调整大小后,我在避免在自定义中放置子视图期间出现不必要的转换时遇到了一些问题。这个问题似乎只在使用WindowManager
而不是调用时出现setContentView()
。这是一个简短的例子:
MainActivity
:
CustomViewGroup
:
activity_main.xml
:
fab_view.xml
清单文件应该包含android.permission.SYSTEM_ALERT_WINDOW
权限,我的依赖列表build.gradle
如下:
这是我正在做的事情:
我有一个自定义视图CustomViewGroup
继承自ViewGroup
,在我的简短示例中包含一个FloatingActionButton
, 放置在父视图的左下角。的默认大小是CustomViewGroup
包含的那些FloatingActionButton
:264x264。
我已经实现了onClick
和onMeasure
方法,CustomViewGroup
以便在发生ACTION_DOWN
事件时将大小CustomViewGroup
扩展到整个显示。如果发生ACTION_UP
事件,大小将恢复为默认值。FloatingActionButton
中的位置CustomViewGroup
总是
其中width
和height
都等于 264,因此当用户触摸后父视图大小发生变化时,按钮本身被放置在不同的位置。
我的问题是:在用户触摸事件的情况下,如何在操作按钮放置期间删除动画?我的意思是按钮视图的垂直运动。我已经尝试过disableTransitionType
使用所有转换类型的方法,但没有任何变化。如果我尝试禁用 xml 文件中的转换,则相同。如果CustomViewGroup
视图通过从 xml 膨胀而不是WindowManager
使用activity_main.xml
你对如何解决我的问题有什么建议,也许还有我所观察到的解释?正如您可能从我的代码中猜到的那样,我是 Android 编程的初学者,因此任何与该线程主题不严格相关的一般建议都非常受欢迎!
谢谢你。
更新:我发现使用WindowManager
有一个调用
在ViewRootImpl
(第 5415 行)内,并且在执行此方法期间执行不需要的可见转换。如果我在主活动中从 xml 膨胀,CustomViewGroup
则在触摸事件的情况下不会调用上述方法,并且由于在这种情况下转换也不可见,我想我可以考虑数据成员的relayout
方法mWindowSession
(类型为IWindowSession
)它负责。
android - onMeasure 调用 getMeasuredWidth 或 Height 为子级返回 0
我正在尝试将项目动态添加到我的 CustomView 并使最终高度成为添加在一起的所有子项的大小。唯一的问题是 child.getMeasuredHeight 或 child.getMeasuredWidth 在运行时总是返回值 0。当我调试时,它会随机 10 次中的 1 次似乎实际上包含我实际期望的值为 192 的数据。如果我还将一个值硬编码到布局参数中而不是使用 WRAP_CONTENT 它仍然显示一个值0.我做错了什么。
xml文件
这是我的 CustomLayout.java 类的一部分
在我的主要活动的一部分
c# - 在 Xamarin.Android 的 OnMeasure 覆盖方法中以单独的布局添加 TextView 时不呈现
我有以下课程
TextLayout 类,我在其中创建了一个文本视图并将其添加到 onMeasure 覆盖方法中。
我有另一个类作为中间类,其中我在这个中间类的 OnMeasure 方法中添加了 TextLayout 类,如下所示,
最后,在主类中,我在主类的 OnCreate 中添加了中间类。
在这种情况下,textview 不会在 Xamarin.Android 平台中呈现视图。
同样在另一种情况下,当TextLayout类的布局参数在Intermediate类的OnMeasure方法中设置时(其中定义了TextClass),文本不会在视图中呈现。但是当布局参数在同一类的OnMeasure方法中设置时( TextLayout) 文本在视图中呈现。
设置类的布局参数的正确方法是什么?
有没有办法解决这个问题?
android - RecyclerView#onMeasure() 没有通过调用 setMeasuredDimension() 设置测量尺寸
我有一个带有 so 的片段,RecyclerView
以便LinearSnapHelper
在中心获得视图并通过缩放其大小来突出显示它。
它工作正常,但是当在后按时从 backstack 弹出这个片段时,它会引发以下异常。
RecyclerView is
as的相关代码
android - Android View:onMeasure() onLayout() onDraw() 如何限制调用
我真的很好奇如何限制这些方法的onMeasure()
调用onLayout()
,,,onDraw()
。因为我知道每次View
需要调整大小时都会调用它们(如果View
添加了其他任何东西)。我想对了吗?onMasure()
如果其余部分的Views
尺寸完全相同,我想知道如何避免检查尺寸并设置高度和宽度(尤其是在 期间)。在我的应用程序中,我View
已经得到了片段,而且还有更多:<ScrollView>
<include>
layouts
负责设置视图的方法被调用了大约 10 次。我想只设置一次尺寸,因为我想让@Override
他们在那里做更多的工作并加载HTML
(那些视图是WebView
)的选项。我只想加载一次数据,但由于标题中的方法被多次调用,所以我加载了很多次。它会在我的屏幕上引起某种快门。是否有任何技巧来检查尺寸,如果它们不同,然后再次设置它们,或者有没有办法阻止调用这些方法?
@EDIT
这就是我在onMeasure()
方法中所做的:
其余的 HTML(需要的基本脚本)已加载,onAttachedToWindow
但我不知道在哪里放置此方法:loadDataWithBaseURL
. 我尝试了上面提到的每个方法 onMeasure、onLayout、onDraw,但都做了 10 次。
android - 了解 ViewPager 中的 onMeasure 实现
由于一些不相关的原因,我正在查看 ViewPager 的代码,我看到它覆盖了 ViewGroup 的 onMeasure。我一直在尝试学习如何正确实施 onMeasure,所以我决定仔细研究一下。以下是参考的方法-
我无法理解处理 Decor 视图的重力背后的逻辑。据我了解,如果有两个子视图 - 一个具有左上角的重力,另一个具有右上角的重力,则代码将从childHeightSize中减去两个子视图的高度。这对我来说似乎是错误的,因为逻辑应该只减去具有最大高度的子视图的高度。
为什么要这样实现?
android - 自定义字体导致我的动态 ViewPager 的 OnMeasure 切断文本行
所以我的自定义 TextView 在某些情况下会切断最后一行文本。我正在使用自定义字体。它似乎只切断了最后一个字。我将自定义文本视图更改为常规视图,这迫使我的文本视图使用标准字体而不是我的自定义字体,然后突然调整大小。
问题理论:在使用 DDMS 工具查看我的视图周围的布局大小并比较自定义字体版本与常规字体版本时,看起来它正确测量了字符的高度——如果没有,它会切断部分我更大的自定义字体上的 y、g 和 p。但是它不能正确地猜测我的较大字体将占用的行数,并像测量较小的非自定义字体一样测量行数。因此,当一个字符串以一个刚好在换行边缘的两个字母单词结尾时,它认为不需要换行到下一行并将其切断。
ViewPager 内部的布局,其中包括问题子 CustomTextView:
无聊的 ViewPager:
我的布局文件: