我的布局中有一个gestureOverlayView,用于绘制数字签名。当我以某个方向(比如风景)绘制然后改变方向时,问题就出现了 - overlayView只是清除了。我试过包含onConfigurationChanged();但没有效果。我还尝试了以下onSaveInstance和onRestoreInstance,但它没有给我解决方案:
@Override
protected void onSaveInstanceState(Bundle outState) {
Gesture gesture = overlay.getGesture();
outState.putParcelable("gesture", (Parcelable) gesture);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
Gesture gesture = (Gesture) savedInstanceState.getParcelable("gesture");
overlay.setGesture(gesture);
mDoneButton.setEnabled(true);
super.onRestoreInstanceState(savedInstanceState);
}
我也试过包括:
android:configChanges="fontScale|uiMode|screenLayout|navigation|touchscreen|mcc|mnc|orientation|keyboardHidden|keyboard">
但即便如此也没用。
有没有人能解决这个问题?
答案 0 :(得分:2)
我在我的应用程序中尝试了您的代码并遇到了同样的问题。 getGesture()的结果在onSaveInstanceState,onStop和onPause中为null,所以我猜测GestureOverlayView在屏幕旋转和调用这些方法之间的某处无效。
解决方法是覆盖onGesturePerformed,假设您的Activity实现OnGesturePerformedListener并在覆盖上调用addOnGesturePerformedListener(this),并保存最新Gesture的成员实例。类似的东西:
@Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
mCurrentGesture = gesture;
}
然后在你的onSaveInstanceState中,只需获取并打包成员实例,而不是调用getGesture()。现在,当Activity重新创建时,setGesture()应该按预期工作。
答案 1 :(得分:1)
在清单中使用android:configChanges =“fontScale | uiMode | screenLayout | navigation | touchscreen | mcc”或尝试onSavedInstance;
答案 2 :(得分:0)
当方向改变时,它会重新启动活动。您可以尝试在清单文件中限制应用程序的方向。
机器人:screenOrientation = “纵向”