还是这个手机项目,别嫌我烦,只想记录一下同事指导的代码,分享给你们。

之前主界面还有其他界面采用了fragment,用到现在才发现,简单的fragment其实一点都不简单,里面有很多的方法可以很好的解决问题。下面有这样一个需求,在其中一个fragment A必须要支持横屏,因为展示的数据是一个表格,有好几列,竖屏显示是显示不全的,要求只有这一个界面能够横屏,解决方案:

在以前activity支持横屏是在主AndroidManifest.xml中设置主界面是否支持横竖屏:

 <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="client.verbank.mtp.allone.LoginActivity"         android:configChanges="keyboardHidden|orientation"            android:label="@string/app_name"            android:screenOrientation="portrait"   <!-- 设定进去的为竖屏格式-->            android:theme="@android:style/Theme.NoTitleBar" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>
注意:上面配置解释参考:http://www.cnblogs.com/lijunamneg/archive/2013/03/26/2982461.html

               在一些特殊的情况中,你可能希望当一种或者多种配置改变时避免重新启动你的activity。你可以通过在manifest中设置   android:configChanges属性来实现这点。你可以在这里声明activity可以处理的任何配置改变,当这些配置改变时不会重新启动activity,而会调用activity的onConfigurationChanged(Resources.Configuration)方法。如果改变的配置中包含了你所无法处理的配置(在android:configChanges并未声明),你的activity仍然要被重新启动,而onConfigurationChanged(Resources.Configuration)将不会被调用。其次:android:configChanges=""中可以用的值:keyboard|mcc|mnc|locale|touchscreen|keyboardHidden|navigation|orientation……Configuration 类中包含了很多种信息,例如系统字体大小,orientation,输入设备类型等等.(如上图)比如:android:configChanges="orientation|keyboard|keyboardHidden"当Configuration改变后,ActivityManagerService将会发送"配置改变"的广播,会要求ActivityThread 重新启动当前focus的Activity.这是默认情况,我们不做任何处理,如果我们android:configChanges来配置Activity信息,那么就可以避免对Activity销毁再重新创建,而是调用onConfigurationChanged方法。通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChanged()方法。在AndroidManifest.xml中添加上诉代码的含义是表示在改变屏幕方向、弹出软件盘和隐藏软键盘时,不再去执行onCreate()方法,而是直接执行onConfigurationChanged()。如果不申明此段代码,按照Activity的生命周期,都会去执行一次onCreate()方法,而onCreate()方法通常会在显示之前做一些初始化工作。所以如果改变屏幕方向这样的操作都去执行onCreate()方法,就有可能造成重复的初始化,降低程序效率是必然的了,而且更有可能因为重复的初始化而导致数据的丢失。这是需要千万避免的。


然后在mainactivity中添加配置信息改变的监听方法:

// 橫屏不重新加載activity,調用該方法@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);// 如果是橫屏時候try {// Checks the orientation of the screenif (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {toolbarLayout.setVisibility(View.GONE);} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {toolbarLayout.setVisibility(View.VISIBLE);}} catch (Exception ex) {}}

如果手机开启了允许横竖屏的话,所有的fragment界面,在横屏的时候都会横着,这样明显不能满足项目的需求, 我们解决的思路就是:

在要支持横竖屏的fragment A中,监听是否已经隐藏的方法里面,判断如果已经隐藏,就不支持横竖屏,如果show展现的时候,就可以使用横竖屏,代码如下:

@Overridepublic void onHiddenChanged(boolean hidd) {getActivity().setRequestedOrientation(//通过程序改变屏幕显示的方向hidd ? ActivityInfo.SCREEN_ORIENTATION_NOSENSOR: ActivityInfo.SCREEN_ORIENTATION_SENSOR);}

Activity屏幕属性有以下几种:

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,//指定横屏
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT,//指定竖屏
ActivityInfo.SCREEN_ORIENTATION_USER,//根据用户朝向
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR,//不受重力影响
ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE,//横屏动态转换
ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT,//竖屏动态转换
ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR,//根据重力变换朝向


感谢各位前辈提供的总结!!!更多横竖屏的知识,这位前辈讲的超级详细,可以参考:http://www.cnblogs.com/franksunny/p/3714442.html

更多相关文章

  1. Android绘图机制(三) ViewGroup类的延伸
  2. Android(安卓)数据库SQLite更新升级问题
  3. Android上使用OpenGL画3D菱形
  4. android 下使用GPS 无法获取经纬度的解决方法
  5. Android(安卓)实现广告欢迎界面(倒计时)
  6. Android中ListView的几种常见的优化方法
  7. 探讨android更新UI的几种方法
  8. 使用iTunes把电脑中的视频传到iPhone的方法
  9. 【iOS】网页中调用JS与JS注入

随机推荐

  1. android情景模式切换的实现
  2. Android的BUG(三) - 广为人知的诟病:频繁重
  3. eclipse android基础开发
  4. android gps开发必备资料(含测试demo下载
  5. Android Room联合AsyncListUtil实现Recyc
  6. android layout parser
  7. 在Android平台上开发移动应用程序(毕业设
  8. android输入法手势程序源码
  9. Android 初识Intent
  10. android添加桌面快捷方式