android:configChanges="orientation|screenSize" 更改我的布局外观
android:configChanges="orientation|screenSize" changes my layout look
我有一个 Adapter
class 和一个 MainActivity
。 Adapter
class 显示儿童姓名列表,在姓名旁边显示 time
他们到达学校。问题是当我旋转到横向时,time
值丢失了。
我考虑在 MainActivity
下添加我的清单
android:configChanges="orientation|keyboardHidden|screenSize"
发生的情况是时间值在横向模式下没有丢失,但布局的外观与纵向模式相同。实际上,横向布局看起来与纵向布局有点不同。
在这种情况下我该怎么做才能获得 time
值并保持横向布局的外观。
有2个选项:
- 在您的 Activity 或片段中使用
onSaveInstanceState(Bundle outState)
方法 - 保存您的数据并在旋转后恢复它们(在 onCreate(Bundle savedInstanceState)
或 onRestoreInstanceState(Bundle savedInstanceState)
中)
示例:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("time_data", (Seriazable) mTimeList);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (savedInstanceState != null) {
// restore value of members from saved state
mTimeList = savedInstanceState.getSerializable("time_data");
}
...
}
- 使用 android:configChanges,因为您已经使用它来自己处理更改,但会在旋转后膨胀横向布局
示例:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
我更喜欢第一个选项,也是 Android guide 中提出的这个选项。
您可以简单地将屏幕方向设置为适合您的特定 activity 的纵向,这样它就可以旋转了。 (如果你愿意)
像这样:
<activity android:name=".MainActivity"
android:screenOrientation="portrait">
</activity>
我有一个 Adapter
class 和一个 MainActivity
。 Adapter
class 显示儿童姓名列表,在姓名旁边显示 time
他们到达学校。问题是当我旋转到横向时,time
值丢失了。
我考虑在 MainActivity
android:configChanges="orientation|keyboardHidden|screenSize"
发生的情况是时间值在横向模式下没有丢失,但布局的外观与纵向模式相同。实际上,横向布局看起来与纵向布局有点不同。
在这种情况下我该怎么做才能获得 time
值并保持横向布局的外观。
有2个选项:
- 在您的 Activity 或片段中使用
onSaveInstanceState(Bundle outState)
方法 - 保存您的数据并在旋转后恢复它们(在onCreate(Bundle savedInstanceState)
或onRestoreInstanceState(Bundle savedInstanceState)
中)
示例:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("time_data", (Seriazable) mTimeList);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (savedInstanceState != null) {
// restore value of members from saved state
mTimeList = savedInstanceState.getSerializable("time_data");
}
...
}
- 使用 android:configChanges,因为您已经使用它来自己处理更改,但会在旋转后膨胀横向布局
示例:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
我更喜欢第一个选项,也是 Android guide 中提出的这个选项。
您可以简单地将屏幕方向设置为适合您的特定 activity 的纵向,这样它就可以旋转了。 (如果你愿意) 像这样:
<activity android:name=".MainActivity"
android:screenOrientation="portrait">
</activity>