Android fragment 只让一个fragment支持横屏
来源:互联网 发布:射频卡读写软件 编辑:程序博客网 时间:2024/05/16 00:30
之前主界面还有其他界面采用了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,調用該方法 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // 如果是橫屏時候 try { // Checks the orientation of the screen if (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展现的时候,就可以使用横竖屏,代码如下:
@Override public 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,//根据重力变换朝向
- Android fragment 只让一个fragment支持横屏
- Android fragment 只让一个fragment支持横屏
- Android之切换Fragment只加载一次
- 让iosApp应用只支持横屏
- Android Fragment---创建Fragment
- Android Fragment---管理Fragment
- Android Fragment---创建Fragment
- Android Fragment---管理Fragment
- Android Fragment生命周期 - 多屏幕支持
- Android让Fragment加载到Activity中
- Android让Fragment加载到Activity中
- android让Fragment监听返回按钮
- Android让Fragment加载到Activity中
- Android Fragment---添加一个没有UI的Fragment
- Android Fragment---添加一个没有UI的Fragment
- Android Fragment——添加一个没有UI的Fragment
- Android中一个Fragment调用另一个fragment的方法
- Android 自定义Fragment切换管理类,自动管理Fragment的生命周期,支持FragmentActivity和Fragment里面嵌套fragment
- 字符的转换(php)
- ArrayList的使用方法
- Python re包---正则表达式
- Linux下读取一个目录下的多个文件
- 自定义控件01---简单view的实现
- Android fragment 只让一个fragment支持横屏
- UIButton中的三个UIEdgeInsets属性(二)
- chunked 编码--是什么
- SpringMVC访问静态资源的三种方式
- 死锁怎么检测?
- Android UI框架基本概念
- Windows 7下OpenGL如何配置(网上有教程,这里做部分修改,也是为了方便自己以后使用)
- ibaties 一对多封装
- serializeArray()与 serialize()