-2

アクティビティが読み込まれた後、画面にいくつかの画像をアプリでフォーマットしようとしています。問題は、内部にある間onCreate()onResume()メソッドのImageView幅と高さが=0になることです。ビューのサイズが変更された後、コードを実行するにはどうすればよいですか?私はテストonPostResume()しますが、動作しません=(

4

1 に答える 1

3

Androidのビューには、BlackberryやiPhoneのようにサイズ/位置が固定されていません。代わりに、動的にレイアウトされます。レイアウトはよりもはるかに遅く発生onCreate/onResumeし、理論的には何度も発生する可能性があります。すべてのビューにはメソッドがonMeasureあり、onLayoutそれが原因です。メソッドが戻った後でのみ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);
    }
}
于 2011-07-15T22:46:29.937 に答える