15 android orientation android-layout
这些是我的布局:
我需要在方向改变时保存滚动位置.例如,如果屏幕在纵向模式下显示从中间名开始的布局,则应在横向模式下从相同的位置开始.
小智 39
只需在滚动元素上设置android:id即可.您的视图将自动保存其滚动位置.
来自View.java:15554的代码
protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {
if (mID != NO_ID && (mViewFlags & SAVE_DISABLED_MASK) == 0) {
mPrivateFlags &= ~PFLAG_SAVE_STATE_CALLED;
Parcelable state = onSaveInstanceState();
if ((mPrivateFlags & PFLAG_SAVE_STATE_CALLED) == 0) {
throw new IllegalStateException(
"Derived class did not call super.onSaveInstanceState()");
}
if (state != null) {
// Log.i("View", "Freezing #" + Integer.toHexString(mID)
// + ": " + state);
container.put(mID, state);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ume*_*han 36
要在手机方向更改时保存和恢复ScrollView的滚动位置,您可以执行以下操作:在onSaveInstanceState方法中保存当前位置:
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putIntArray("ARTICLE_SCROLL_POSITION",
new int[]{ mScrollView.getScrollX(), mScrollView.getScrollY()});
}
Run Code Online (Sandbox Code Playgroud)
然后恢复onRestoreInstanceState方法中的位置.请注意,我们需要将一个Runnable发布到ScrollView以使其工作:
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
final int[] position = savedInstanceState.getIntArray("ARTICLE_SCROLL_POSITION");
if(position != null)
mScrollView.post(new Runnable() {
public void run() {
mScrollView.scrollTo(position[0], position[1]);
}
});
}
Run Code Online (Sandbox Code Playgroud)
在谷歌上找到这个解决方案.归功于Original Coder.:)
MrD*_*umb -15
如果您的活动没有在轮换中更改任何内容,您可以在此特定活动的清单文件中使用 android:configChanges="orientation|keyboardHidden|screenSize" 。但这显然是一种解决方法,而不是一个正确的解决方案。
笔记:
如果您需要对横向和纵向使用不同的视图,或者需要对不同的设备使用不同的视图,则应该使用捆绑并在 saveinstancestate 上保存数据并在 oncreate 中检索数据。此方法停止重新创建活动,并且活动假设事情将由用户自己处理。
归档时间: |
|
查看次数: |
13477 次 |
最近记录: |