关于Activity横竖屏切换

    关于横竖屏切换时涉及到的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();
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值