好吧,我通过创建自己的布局类并在其 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,使用 setter 并添加函数:
@Override
public void onSizeChanged(int width, int height) {
// Do your stuff with the GOOD size !
}