配置更改好吧,我通过创建自己的布局类并通过在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 !
}
我很遗憾没有你的问题的答案,但是甚至不考虑手动调用系统生命周期回调。在'onResume()'中调用'onCreate()'是一个非常糟糕的主意。此外,在理想的世界中,您只需通过“NonConfigurationInstance”调用将玩家对象从被销毁的活动传递给新出生的对象。但是,我似乎记得,对于视频来说可能会有困难。 – 2013-04-23 11:28:05
感谢您的回答。我已经尝试通过NonConfigurationInstance传递媒体播放器,但是...我们并不处于理想的世界,并且MediaPlayer似乎不可能:/ – 2013-04-23 13:43:10
是的,这就是我所记得的。不过,它几乎可以与其他所有产品配合使用。 ;)无论如何,我不确定你的实际问题是什么。什么不适合你? - 关于很多事情,通常认为应该在'onCreate()'中完成它们,当它们应该在'onResume()'中完成时。 ;) – 2013-04-23 13:51:45