gpt4 book ai didi

Android: 错误的 onMeasure - 多次调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:24 25 4
gpt4 key购买 nike

希望得到帮助。我的函数调用 onMeasure 的问题。在我的 xml 文件中(RelativeLayput)- 3 个元素:TextView、RelativeLayout 并将它们包含在我的类中。 现在是我的 Main Activity 类和我的创建类

  public class MainActivity extends Activity implements OnTouchListener {

final String LOG_TAG = "myLogs";
TextView tv1;
UiMyClass uimc;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

tv1 = (TextView) findViewById(R.id.mytext2);
tv1.setOnTouchListener(this);
String str1 = "qwertyy";
uimc = (UiMyClass) findViewById(R.id.myclass1);
Log.d(LOG_TAG, "Open1-0" + " " + str1);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
int evX = (int) event.getX();
int evY = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
tv1.setText("uyq8qyw");
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
Log.d(LOG_TAG, "Touch_GS");
return true;
}
}

public class UiMyClass extends View {

final String LOG_TAG = "myLogs";

public UiMyClass(Context context, AttributeSet attrs) {
super(context, attrs);
this.setBackgroundResource(R.drawable.ic_launcher);
Log.d(LOG_TAG, "Initialization_00");
}

@Override
protected void onMeasure(int x, int y) {
setMeasuredDimension(100, 50);
Log.d(LOG_TAG, "Measure_02");
}

}

这里有什么问题。当应用程序启动时,会执行 onMeasure,但为什么会执行 8 次(在日志中可见)。顺便说一句,如果要在其他层增加我的元素View的围合度,onMeasure是执行2^(围合层数+2)次。 (即对于一个 8,对于 2 - 16)此外,当我按下 TextView 事件时,onTouch 被执行,但它也因此开始 onMeasure。如何使 onMeasure 不再启动,并且通常只启动一次。预先感谢您的帮助。

最佳答案

这种行为发生在两种情况下:- 当您使用 LinearLayout 并在其中一个子项上设置 layout_weight 时。 weight 属性导致该 child 被测量两次。因此,如果您将另一个带有权重的 LinearLayout 放在里面,您将获得 4 个叶子子项的度量。- RelativeLayout 也会发生同样的情况。某些约束可能会导致多次测量通过。

这意味着您应该小心权重属性和 RelativeLayout。我建议您使用 Android 的 traceview profiler 和 Hierarchy Viewer 来衡量布局的性能。

关于Android: 错误的 onMeasure - 多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15576243/

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