【问题标题】:execute code after Activity loads in Android在Android中加载Activity后执行代码
【发布时间】:2011-07-15 21:58:37
【问题描述】:

我正在尝试我的应用在 Activity 加载后格式化屏幕中的一些图像。问题是在onCreate()onResume() 方法中,我的ImageView 的宽度和高度=0。调整视图大小后如何运行一些代码? 我测试了onPostResume(),但它不起作用 =(

【问题讨论】:

  • 我认为你的问题在第 15 行,你应该添加一个;。或者,少说脏话:您可能想发布不起作用的代码(仅显示不起作用的最小示例),然后告诉我们您想要什么,您得到什么等等。
  • 不要认为我需要代码来解释具有 fill_parent 高度和宽度的图像视图在 le Activity 加载时具有高度 = 0 和宽度 = 0,并且我想在项目采用实际大小时执行代码..
  • 我想了这么多,这就是我添加评论的原因。如果您一开始就同意,我想您会发布代码,对吗?正确的。您可能很清楚,但我无法快速了解正在发生的事情,因此无法(也不会)提供帮助。想一想:什么观点?设置好了吗?它是如何设置的?尺寸应该是多少?我们可以确定您要求时的尺寸吗?图像是在代码中设置的吗?什么时候?

标签: java android layout oncreate


【解决方案1】:

Android 中的视图不像 Blackberry 或 iPhone 那样具有固定的大小/位置;相反,它们是动态布局的。布局比onCreate/onResume 晚得多,理论上可以发生很多次。每个视图都有方法 onMeasureonLayout 负责。只有在onLayout 方法返回后,您才能知道视图的大小和位置。在此之前,视图的大小为 0,位置为 0(如您所见)。

因此尝试在 onCreate/onResume 中获取 ImageView 的大小毫无意义,因为此时尚未调用 onLayout

相反,像这样覆盖 onLayout 并在那里做你的事情:

public class MyImageView extends ImageView {
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        // at this point size and position are known
        int h = getHeight();
        int w = getWidth();
        doSomethingCool(h,w);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多