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