Setting 模块之辅助功能
Setting模块之无障碍(辅助功能)
首先这个辅助功能在AccessibilitySettings类中通过oncreate()方法去加载布局
布局Serverce(SERVICES_CATEGORY)
布局System(SYSTEM_CATEGORY):
字幕(CAPTIONING_PREFERENCE_SCREEN),
放大手势(DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN),
大号字体(TOGGLE_LARGE_TEXT_PREFERENCE),
高对比度文字(TOGGLE_HIGH_TEXT_CONTRAST_PREFERENCE),
按电源按钮结束通话(TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE),
自动旋转屏幕(TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE),
说出密码(TOGGLE_SPEAK_PASSWORD_PREFERENCE),
无障碍快捷方式(ENABLE_ACCESSIBILITY_GESTURE_PREFERENCE_SCREEN),
触摸和按住延迟(SELECT_LONG_PRESS_TIMEOUT_PREFERENCE),
颜色反转(TOGGLE_INVERSION_PREFERENCE),
色彩校正(DISPLAY_DALTONIZER_PREFERENCE_SCREEN)。
(未找到 文字转语音(TTS)输出)
然后执行initializeAllPreferences();初始化控件,
onresume()方法:更新控件updateAllPreferences();注册服务loadInstalledServices();
updateAllPreferences();这个方法分为两个部分:
updateServicesPreferences(); //服务是自动生成的,这个方法会去根据服务类去创建preference然后添加进去
updateSystemPreferences(); //即更新System
监听事件:
onPreferenceChange()监听触摸按住延迟,颜色反转
onPreferenceTreeClick()监听大号字体 高对比度文字 按电源建结束通话 自动旋转屏幕说出密码 无障碍快捷方式 放大手势
未找到(字幕,色彩校正)
字幕com.android.settings.accessibility.CaptionPropertiesFragment"
色彩校正com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment
关于控件Preferences的理解:
1:自动保存2.自动跳转3.两个监听器onPreferenceChange()onPreferenceTreeClick()
在onCreateView()方法中去解析
publicView onCreateView(
LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
finalView rootView = inflater.inflate(R.layout.captioning_preview,container, false);
介绍一下这个布局R.layout.captioning_preview,这个布局就是这个界面的那张图
实际是两个控件SubtitleView和ImagView
介绍一下onViewCreated()方法,在onCreateView方法后回调,并在这之前把状态保存到View
在这个onViewCreated()方法中
finalbooleanenabled = mCaptioningManager.isEnabled();
mPreviewText= (SubtitleView) view.findViewById(R.id.preview_text);//字幕外观示例
//根据系统服务得到CaptioningManager对象,他的isEnabled()判断来用户首选的状态
mPreviewText.setVisibility(enabled? View.VISIBLE: View.INVISIBLE);mPreviewWindow= view.findViewById(R.id.preview_window);
mPreviewViewport= view.findViewById(R.id.preview_viewport);
mPreviewViewport.addOnLayoutChangeListener(newOnLayoutChangeListener() {//监听布局改变
@Override
publicvoidonLayoutChange(View v, intleft, inttop, intright, intbottom,
intoldLeft, intoldTop, intoldRight, intoldBottom) {
refreshPreviewText();//刷新
}
});
}
字幕:(captioning_preference_screen)
自动跳转的进入的是CaptionPropertiesFragment
在oncreate
addPreferencesFromResource(R.xml.captioning_settings);//加入布局
initializeAllPreferences();//初始化控件
updateAllPreferences();//更新控件
refreshShowingCustom();//判断是否显示custom
installUpdateListeners();//设置监听器
介绍一下这个布局R.xml.captioning_settings,整个是一个PreferenceScreen,里面分为两个部分,都是PreferenceCategory,一个是标准选项,一个是自定义选项"
标准选项(standard):
语言(captioning_locale),文字大小(captioning_font_size),字幕样式(captioning_preset)
自定义选项(custom):
字体系列(captioning_typeface),文字颜色(captioning_foreground_color),
文字不透明度(captioning_foreground_opacity),边缘类型(captioning_edge_type),
边缘颜色(captioning_edge_color),背景颜色(captioning_background_color),
背景不透明度(captioning_background_opacity),字幕窗口颜色(captioning_window_color),
字幕窗口不透明度(captioning_window_opacity)
界面上的开启功能的控件在
onActivityCreated(BundlesavedInstanceState) {
SettingsActivity activity =(SettingsActivity) getActivity();
mSwitchBar= activity.getSwitchBar();
mSwitchBar.setCheckedInternal(enabled);
mToggleSwitch= mSwitchBar.getSwitch();//得到开启控件
installSwitchBarToggleSwitch();//设置开启控件监听
开启控件监听:mToggleSwitch.setOnBeforeCheckedChangeListener(newOnBeforeCheckedChangeListener() {
@Override
publicbooleanonBeforeCheckedChanged(ToggleSwitch toggleSwitch, booleanchecked) {
mSwitchBar.setCheckedInternal(checked);
Settings.Secure.putInt(getActivity().getContentResolver(),
Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED,checked ? 1 : 0);
getPreferenceScreen().setEnabled(checked);//让整个界面不可用或者可用
if(mPreviewText!= null){
mPreviewText.setVisibility(checked? View.VISIBLE: View.INVISIBLE);//”字幕外观示例“是否可用
}
returnfalse;
}
});
监听事件:(都是按代码顺序)
字体系列,文字大小,语言,:onPreferenceChange(Preferencepreference, Object value)
<pre name="code" class="html">Settings.Secure.putString(cr,Settings.Secure.ACCESSIBILITY_CAPTIONING_LOCALE,(String)
putString()方法是Storea name/value pair into the database.
最后都执行refreshPreviewText();
方法如下
finalSubtitleView preview = mPreviewText;
if(preview != null){
finalintstyleId = mCaptioningManager.getRawUserStyle();//得到用户首选的id
applyCaptionProperties(mCaptioningManager,preview, mPreviewViewport,styleId);//设置“字幕外观示例”的文本框大小和字finalLocale locale = mCaptioningManager.getLocale();//得到用户所选语言
if(locale != null){
finalCharSequence localizedText = AccessibilityUtils.getTextForLocale(
context, locale,R.string.captioning_preview_text);
preview.setText(localizedText);//设置“字幕外观示例”的语言
} else{
preview.setText(R.string.captioning_preview_text);
}finalCaptionStyle style = mCaptioningManager.getUserStyle();//得到用户所选视觉属性
if(style.hasWindowColor()) {
mPreviewWindow.setBackgroundColor(style.windowColor);
} else{
finalCaptionStyle defStyle = CaptionStyle.DEFAULT;
mPreviewWindow.setBackgroundColor(defStyle.windowColor);
}
}
文字颜色和文字不透明度,背景颜色和背景不透明度, 字幕窗口颜色和字幕窗口不透明度,
边缘颜色,边缘类型,字幕样式onValueChanged()
执行的操作是Storea name/value pair into the database.
Settings.Secure.putInt(cr,Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR,merged);
放大手势:
监听事件onPreferenceTreeClick()跳转的AccessibilitySettings类中
handleDisplayMagnificationPreferenceScreenClick()
在这个方法中new一个Bundle,在这个Bunle对象中放数据,数据分别是:标题的名字,文字说明,和用户首选,这个Bunle中的数据是关于跳转的Fragment的数据,最后
super.onPreferenceTreeClick(mDisplayMagnificationPreferenceScreen,mDisplayMagnificationPreferenceScreen);
执行父类的方法跳转到ToggleScreenMagnificationPreferenceFragment
在这个Fragment中
protectedvoidonInstallSwitchBarToggleSwitch() {
super.onInstallSwitchBarToggleSwitch();
mToggleSwitch.setOnBeforeCheckedChangeListener(newOnBeforeCheckedChangeListener() {
@Override
publicbooleanonBeforeCheckedChanged(ToggleSwitch toggleSwitch, booleanchecked) {
mSwitchBar.setCheckedInternal(checked);
getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED,checked);
onPreferenceToggled(mPreferenceKey,checked);
returnfalse;
}
});
}
mToggleSwitch是从父类(ToggleFeaturePreferenceFragment)得到的,父类得到方式与字幕中得到开启开关方式相同
大号字体:
监听事件onPreferenceTreeClick()监听的AccessibilitySettings类中
handleToggleLargeTextPreferenceClick()
在这个方法中先去判断控件的true或者false再执行
ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig);
framwork层去更新设置
高对比度文字:
监听事件onPreferenceTreeClick()监听的AccessibilitySettings类中
handleToggleTextContrastPreferenceClick()
在这个方法中执行
Settings.Secure.putInt(getContentResolver(),
Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED,(mToggleHighTextContrastPreference.isChecked()? 1 : 0));
将值放入数据库
按通话按你结束通话:
监听事件onPreferenceTreeClick()监听的AccessibilitySettings类中
handleTogglePowerButtonEndsCallPreferenceClick()
在这个方法中执行
Settings.Secure.putInt(getContentResolver(),Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
(mTogglePowerButtonEndsCallPreference.isChecked()?
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP:Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF));
将值放入数据库
自动旋转屏幕:
监听事件onPreferenceTreeClick()监听的AccessibilitySettings类中
handleLockScreenRotationPreferenceClick()
在这个方法中执行
RotationPolicy.setRotationLockForAccessibility(getActivity(),!mToggleLockScreenRotationPreference.isChecked());
framwork层去设置旋转
说出密码:
监听事件onPreferenceTreeClick()监听的AccessibilitySettings类中
handleToggleSpeakPasswordPreferenceClick()
在这个方法中执行
Settings.Secure.putInt(getContentResolver(),
Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,mToggleSpeakPasswordPreference.isChecked()? 1 : 0);
将值放入数据库
无障碍快捷方式:
与放大手势相同,只是方法和跳转的Fragment不同
handleToggleEnableAccessibilityGesturePreferenceClick()
ToggleGlobalGesturePreferenceFragment
监听事件:
protectedvoidonInstallSwitchBarToggleSwitch() {
super.onInstallSwitchBarToggleSwitch();
mToggleSwitch.setOnBeforeCheckedChangeListener(newOnBeforeCheckedChangeListener() {
@Override
publicbooleanonBeforeCheckedChanged(ToggleSwitch toggleSwitch, booleanchecked) {
mSwitchBar.setCheckedInternal(checked);//设置开关
getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED,checked);//将值放入
onPreferenceToggled(mPreferenceKey,checked);//更新值
returnfalse;
}
});
文字转语音(TTS)输出:
自动跳转TextToSpeechSettings
onCreate()方法中
addPreferencesFromResource(R.xml.tts_settings);
初始化控件
需要说一下的
List<EngineInfo> engines =mEnginesHelper.getEngines();
for(EngineInfo engine : engines) {
TtsEnginePreferenceenginePref = newTtsEnginePreference(getActivity(), engine,
this,activity);
mEnginePreferenceCategory.addPreference(enginePref);
}
finalint engineCount =mEnginePreferenceCategory.getPreferenceCount();
for(inti = 0; i < engineCount; ++i) {
finalPreference p = mEnginePreferenceCategory.getPreference(i);
if(p instanceofTtsEnginePreference) {
TtsEnginePreferenceenginePref = (TtsEnginePreference) p;
if(enginePref.getKey().equals(engine)) {
enginePref.setVoiceDataDetails(data);
break;
这里会去newTTS控件,列出TTS的apk,
点击PicoTTS后进入设置的TtsEngineSettingsFragment
onCreate()方法中
addPreferencesFromResource(R.xml.tts_engine_settings);
初始化
监听事件
mLocalePreference= (ListPreference) root.findPreference(KEY_ENGINE_LOCALE);//语言
mLocalePreference.setOnPreferenceChangeListener(this);
mEngineSettingsPreference= root.findPreference(KEY_ENGINE_SETTINGS);//设置
mEngineSettingsPreference.setOnPreferenceClickListener(this);
mInstallVoicesPreference= root.findPreference(KEY_INSTALL_DATA);//安装数据包
mInstallVoicesPreference.setOnPreferenceClickListener(this);
由于没有安装TTS所以未实现
触摸和按住延迟:
监听事件onPreferenceChange()监听的AccessibilitySettings类中
handleLongPressTimeoutPreferenceChange()
在这个方法中
Settings.Secure.putInt(getContentResolver(),
Settings.Secure.LONG_PRESS_TIMEOUT,Integer.parseInt(stringValue));
mSelectLongPressTimeoutPreference.setSummary(
mLongPressTimeoutValuetoTitleMap.get(stringValue));
将值放入数据库,并设置这个控件的Summary
颜色反转:
监听事件onPreferenceChange()监听的AccessibilitySettings类中
handleToggleInversionPreferenceChange(booleanchecked)
在这个方法中
Settings.Secure.putInt(getContentResolver(),
Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,(checked ? 1 : 0));
将值放入数据库
色彩校正:
自动跳转进入的是ToggleDaltonizerPreferenceFragment
在这个Fragment的oncreate方法中
addPreferencesFromResource(R.xml.accessibility_daltonizer_settings);
这个布局中有两个控件Preference和ListPreference,
然后初始化控件initPreferences();
监听事件:
校正模式:
mType= (ListPreference) findPreference("type");//校正模式
监听事件onPreferenceChange()
Settings.Secure.putInt(getContentResolver(),TYPE,Integer.parseInt((String)newValue));
preference.setSummary("%s");
将值放入数据库,并设置控件summary
开启关闭:
从父类得到,与上面的开启关闭控件方式一致
监听事件onSwitchChanged()
最后去执行
onPreferenceToggled()
Settings.Secure.putInt(getContentResolver(),ENABLED,enabled ? 1 : 0);
将值放入数据库
Setting 模块之辅助功能相关推荐
- android Setting模块简介
Setting模块简介 一.Settings涉及的模块 4.0设置的layout有很大的改变.将设置分为四个部分: WIRELESS & NETWORKS:SIM卡管理,流量使用情况,飞行模式 ...
- DCMTK:dcmseg模块的辅助功能
DCMTK:dcmseg模块的辅助功能 dcmseg模块的辅助功能 dcmseg模块的辅助功能 #include "dcmtk/config/osconfig.h" #includ ...
- 【Python】-setting模块的安装
人生苦短我用Python 安装settings模块其实是需要安装scrapy模块 然后从scrapy导入settings模块 像这样 安装方法一: from scrapy import setting ...
- android setting模块,android O版本 设置(Settings)模块总结--设置的一级界面的加载
O版本的设置界面相对有N有了一些变化,O上面增加了顶级类别的菜单,而之前一些在一级菜单的则移动到了二级界面里面, 如"WIFI","移动网络"等之前是在一级界面 ...
- [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...
本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...
- Setting学习(一)-静态界面
Setting学习(一)-静态界面 设置是整个android系统的重要应用,涉及的都是系统功能 Setting模块的主要路径 :/packages/apps/Settings/ Setting模块里的 ...
- Android 系统默认参数的修改
转自: http://www.th7.cn/Program/Android/201505/447097.shtml 写在前面的话 一般在新项目开始之初,我们需要针对客户需求进行各种系统默认属性的配置, ...
- DRBD中文应用指南
DRBD中文应用指南 写在前面的话: 为了方便学习,将drbd的英文文档翻译出来,以供学习和参考.但因为本人英语水平有限,以及对drbd的了解并不足够深入,翻译中出现很多不通顺或者是语病的地方,请大家 ...
- Android系统修改汇总(MTK)
以下都是基于Android 6.0 的代码去修改的!!! 十四.将桌面workspace.hotseat 大小调整 放大一半 , 这个要根据自己的需求来制定 workspace.setPadding ...
最新文章
- sql server 2005 T-SQL @@TOTAL_READ (Transact-SQL)
- AtcoderCodeForces杂题11.6
- centos安装cowboy过程
- Unity3D安卓程序中常用静态方法封装
- 华三服务器怎么设置系统启动模式,H3C 开局设置
- 关于字符串 --java
- feign调用多个服务_Spring Cloud 快速入门系列之feign–微服务之间的调用
- 笔记本电脑如何保养_嘉兴专业笔记本电脑喷漆加工厂价格实惠
- Linux文件IO(文件的读写)
- 【Spring】Unable to start ServletWebServerApplicationContext due to miss ServletWebServerFactory bean
- 收藏!50个帮你自我提升的网站
- 可以运行python的路由器_用python管理Cisco路由器
- 【Django 2021年最新版教程25】模板语言 前端for循环怎么用 实例
- python从外部传入参数_Python学习杂记_8_从程序外部传参的办法sys.argv
- 前端企业级代码规范(巨详细)
- Spring AOP报错Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available问题
- 服务器指的是系统,服务器操作系统指的是什么
- Python英文单词大小写转换及所有首字母大写
- suse linux 11 xdm图形化,suse xdm 设置
- jdk-8u181-windows-x64(JDK1.8)安装包
热门文章
- JS - Array - 在数组的指定下标添加或替换元素 。 也可删除指定下标的元素
- Libuv Timer定时器
- OpenShift 4 - 在单节点 OpenShift 上部署 ODF 存储软件
- 做前端开发拿 30W 年薪很难吗?
- ctab法提取dna流程图_(完整版)CTAB法提取DNA原理及步骤、制胶、电泳
- js将页面转成PDF文档
- java树莓派温度传感器_怎样使用树莓派读取传感器上的温度和湿度
- 2020BAJT等九大一线大厂的薪资和职级对比
- Vue3的filter过滤器代替方法
- termux目录_Termux 入门与实践