源码DisplaySettings分析android横竖屏切换的开关
2012-09-17 19:46
260 查看
由于jwisp本人在使用手机过程中, 经常需要打开或者关闭横竖屏的开关. (比如jwisp在发短信或者各种文本编辑情况时, 经常需要全键盘来快速输入, 而浏览文本或者某些应用时, 躺着或者坐着不切换横竖屏)
好, 有了jwisp这个需求, 我们如何实现呢.
这里说两句废话, 有同学一碰到问题先网上搜, 其实有时候搜东西, 信息不是没有, 而是太多, 花很久时间才能找到自己想要的结果. 如果花很久又没有找到自己的结果就更郁闷了. 而且这种方法常常也没有让自己锻炼到自己的技术. 当然搜索能力得到了提高, 呵呵.
所以不如我们直接找到android源代码, 看看google是怎么实现的, 即可以锻炼自己阅读源码能力, 也提高了分析能力, 还能在自己的程序中借鉴google的程序设计思想, 岂不是一举三得之妙事?
好, 进入正题, 首先我们在手机界面上, 可以找到这个程序设置的关键词. 设置 -> 显示设置 -> 自动旋转屏幕
如果熟悉android源码, 直接定位DisplaySettings.java (packages/apps/settings/src/com/android/settings/下)
如果不知道这个类, 我们该如何找到呢?
在命令行下, 敲命令也行:
打开DisplaySettings.java后, 关注下面这几个关键地方就行
1. DisplaySettings类继承关系
我们在设置类的layout中, 经常使用PreferenceActivity类
2.checbox资源
mAccelerometer是这个横竖屏切换的关键点, 它的状态动作决定了横竖屏开关的打开和关闭. 它是在display_settings.xml中设置的.
2.加载checkbox的初始状态
加载checkbox的初始状态
3.mAccelerometer的状态更新
ok, 这里就是关键点了. Settings使用SharedPreference方式设置了开关的对应值, 我们这里只需要通过Settings.System的静态方法putInt就可以实现键值对对应的修改选项呢了
很简单, 如果自己分析的话, 应该也很快, 不会比网上找更慢
最后, jwisp提醒大家, 在程序中添加Settings.System.putInt()后, 还需要在AndroidManifest.xml中添加对应权限:
ok, good luck.
更多: http://www.jwisp.com
好, 有了jwisp这个需求, 我们如何实现呢.
这里说两句废话, 有同学一碰到问题先网上搜, 其实有时候搜东西, 信息不是没有, 而是太多, 花很久时间才能找到自己想要的结果. 如果花很久又没有找到自己的结果就更郁闷了. 而且这种方法常常也没有让自己锻炼到自己的技术. 当然搜索能力得到了提高, 呵呵.
所以不如我们直接找到android源代码, 看看google是怎么实现的, 即可以锻炼自己阅读源码能力, 也提高了分析能力, 还能在自己的程序中借鉴google的程序设计思想, 岂不是一举三得之妙事?
好, 进入正题, 首先我们在手机界面上, 可以找到这个程序设置的关键词. 设置 -> 显示设置 -> 自动旋转屏幕
如果熟悉android源码, 直接定位DisplaySettings.java (packages/apps/settings/src/com/android/settings/下)
如果不知道这个类, 我们该如何找到呢?
在命令行下, 敲命令也行:
grep '自动旋转屏幕' /android -r -s
打开DisplaySettings.java后, 关注下面这几个关键地方就行
1. DisplaySettings类继承关系
public class DisplaySettings extends PreferenceActivity
我们在设置类的layout中, 经常使用PreferenceActivity类
2.checbox资源
private CheckBoxPreference mAccelerometer; ...... protected void onCreate(Bundle savedInstanceState) { ...... addPreferencesFromResource(R.xml.display_settings); ...... mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER); mAccelerometer.setPersistent(false); ...... }
mAccelerometer是这个横竖屏切换的关键点, 它的状态动作决定了横竖屏开关的打开和关闭. 它是在display_settings.xml中设置的.
2.加载checkbox的初始状态
private void updateState(boolean force) { ...... updateAnimationsSummary(mAnimations.getValue()); mAccelerometer.setChecked(Settings.System.getInt( getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) != 0); }
加载checkbox的初始状态
3.mAccelerometer的状态更新
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mAccelerometer) { Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, mAccelerometer.isChecked() ? 1 : 0); } return true; }
ok, 这里就是关键点了. Settings使用SharedPreference方式设置了开关的对应值, 我们这里只需要通过Settings.System的静态方法putInt就可以实现键值对对应的修改选项呢了
很简单, 如果自己分析的话, 应该也很快, 不会比网上找更慢
最后, jwisp提醒大家, 在程序中添加Settings.System.putInt()后, 还需要在AndroidManifest.xml中添加对应权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
ok, good luck.
更多: http://www.jwisp.com
相关文章推荐
- Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程
- Android 横竖屏切换问题分析
- Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程
- Android横竖屏切换解决方案
- Android横竖屏切换总结
- android 横竖屏切换属性和播放视频全屏切换
- Android(Java):android横竖屏切换
- Android横竖屏切换
- Android横竖屏切换总结
- 如何让Android横竖屏切换时不销毁当前activity
- Android开发,相机拍摄并返回时,部分手机出现横竖屏切换的错误处理。
- Android横竖屏切换不重新调用onCreate()
- android横竖屏切换布局处理及屏幕旋转处理
- android设置横竖屏切换时生命周期不会改变
- Android程序怎样禁止横竖屏切换
- [Android疑难杂症]Gallery默认和横竖屏切换选中状态问题(2.3、2.3系统存在)
- 解决Android手机 屏幕横竖屏切换
- Android横竖屏切换小结
- android 在ADT中对模拟器横竖屏切换的快捷键
- android播放视频时在立体声与单声道之间切换无变化原因分析及解决