关于横竖屏切换时涉及到的activity的生命周期变化就不多说了,主要是总结一个横竖屏切换时layout的处理:
这里有一点需要注意的是:从sdk3.2开始,当手机屏幕发现旋转,新增加一个screenSize,这个值也会跟着发生改变。所以要不想重绘界面,需要把screenSize这项也要加入到配置文件中:android:configChanges="orientation|keyboardHidden|screenSize"
然后还有一个问题就是一般设备都会禁止screen自动旋转,所以如果要使得onConfigurationChanged能监听到,需要在manifest文件添加
android:screenOrientation="sensor"(根据设备重力感应来改变)
具体的java代码管理:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_chart_center);
if (this.getResources().getConfiguration().orientation != screenConfiguration) {
screenLogicChange(this.getResources().getConfiguration().orientation);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation != screenConfiguration) {
screenLogicChange(this.getResources().getConfiguration().orientation);
}
}
private void screenLogicChange(int orientation) {
hideAllFragment();
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
/**
* replace horizontal fragment
*/
if (mToolBar.getVisibility() == View.VISIBLE) {
mToolBar.setVisibility(View.GONE); }
FragmentTransaction transaction = mFragmentManager.beginTransaction();
if (horizontalFragment == null) {
horizontalFragment = HorizontalLineChartFragment.newInstance(); }
if (!horizontalFragment.isAdded()) {
transaction.add(R.id.chart_center_fragment_container, horizontalFragment).commit();
} else {
if (horizontalFragment.isHidden()) {
transaction.show(horizontalFragment).commit();
} } }
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
/**
* replace main fragment
*/
initToolBar();
FragmentTransaction transaction = mFragmentManager.beginTransaction();
if (mainFragment == null) {
mainFragment = ChartCenterMainFragment.newInstance(); }
if (!mainFragment.isAdded()) {
transaction.add(R.id.chart_center_fragment_container, mainFragment).commit();
} else {
if (mainFragment.isHidden()) {
transaction.show(mainFragment).commit();
} } }
screenConfiguration = orientation; }
private void hideAllFragment() {
FragmentTransaction hideTransaction = mFragmentManager.beginTransaction();
if (mainFragment != null && mainFragment.isVisible()) {
hideTransaction.hide(mainFragment); }
if (horizontalFragment != null && horizontalFragment.isVisible()) {
hideTransaction.hide(horizontalFragment); }
hideTransaction.commit();
}