gpt4 book ai didi

java - 谁调用方法 TextView.onMeasure(int, int) 并给它两个参数?

转载 作者:行者123 更新时间:2023-11-29 21:00:25 25 4
gpt4 key购买 nike

我想实现一个TextView,我覆盖了方法“onMearsure()”,我只是做了一个简单的Layout,activity_main,只是一个LinearLayout。像这样的 xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> </LinearLayout>

然后我使用 Java 代码将我的 TextView 放入此布局中。像这样:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout root = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.activity_main, null);
setContentView(root);

KTextView textView = new KTextView(this, null);
textView.setText("abcd");
root.addView(textView);

}

现在,我在 onMeasure() 方法中做了一些登录,它显示 widthMode 和 heightMode 是 EXACTLY 和 AT_MOST。但是它的parent(LinearLayout)的width和height都是MATCH_PARENT,所以我认为width mode和height mode都是AT_MOST。

我想知道谁调用了 TextView.onMeasure()?是它的父容器吗?

最佳答案

好吧,当开发人员要扩展 View 时,这是一个常见问题。

onMeasure() 是您告诉 Android 您希望自定义 View 有多大取决于父级提供的布局约束的机会。

我会建议先通过 this .

我想强调这篇特定文章中的一个非常具体的段落。

Drawing the layout is a two pass process: a measure pass and a layout pass. The measuring pass is implemented in measure(int, int) and is a top-down traversal of the View tree. Each View pushes dimension specifications down the tree during the recursion. At the end of the measure pass, every View has stored its measurements. The second pass happens in layout(int, int, int, int) and is also top-down. During this pass each parent is responsible for positioning all of its children using the sizes computed in the measure pass.

阅读本文后,很容易理解只要您的布局在屏幕上可见。它将从根节点(意味着父节点到子节点)开始,每当您的 View 要绘制时,它将检查可用空间并触发具有所需规范的 onMeasure。我想this answer会有帮助。

抱歉,忘记回答你的问题了,看完LinearLayout的源码你会发现一个私有(private)方法:

private void forceUniformWidth(int count, int heightMeasureSpec) {
...
}

这将强制您的 widthmode 为 EXACTLY。参见 this code 中的 509 行.

关于java - 谁调用方法 TextView.onMeasure(int, int) 并给它两个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26293705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com