さて、私は独自のレイアウト クラスを作成し、その onDraw 関数でサイズを取得することで解決しました。少しやり過ぎですが、それが私が見つけた唯一の解決策です。
@Sharad Mhaske と @Class Stacker に感謝します。
編集: X と Y の位置、および幅と高さを設定することにより、コンテナー内にビューを手動で配置していることに言及していないことに気付きました。そのため、コンテナーは自動的にサイズ変更されますが、サイズは自動的に変更されません。
編集:これが私が現在使用しているコードの一部です:
public class TilesContainer extends FrameLayout {
// ------------------------------------------------------------------------------------------
// Public interface for on size change event :
public static interface OnSizeChangedListener { void onSizeChanged(int width, int height); }
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
// Private attributes :
private int _width = -1;
private int _height = -1;
private OnSizeChangedListener _listener = null;
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
// Constructors :
public TilesContainer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.setWillNotDraw(false);
}
public TilesContainer(Context context, AttributeSet attrs) {
super(context, attrs);
this.setWillNotDraw(false);
}
public TilesContainer(Context context) {
super(context);
this.setWillNotDraw(false);
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
// Setters :
public void setOnSizeChangedListener(OnSizeChangedListener listener) { _listener = listener; }
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
// onDraw overload :
@Override
protected void onDraw(Canvas canvas) {
// Call super :
super.onDraw(canvas);
// If there is a listener and if the size changed :
if(_listener != null && (_width != this.getWidth() || _height != this.getHeight()) ) {
_width = this.getWidth();
_height = this.getHeight();
_listener.onSizeChanged(this.getWidth(), this.getHeight());
}
}
// ------------------------------------------------------------------------------------------
}
アクティビティで、OnSizeChangedListener を実装し、セッターを使用して関数を追加します。
@Override
public void onSizeChanged(int width, int height) {
// Do your stuff with the GOOD size !
}