中文状态下,流量使用、存储容量等位置的单位为中文表述:字节、吉字节、兆字节。需要将其改为 B、GB、MB 等。

1.修改流量使用单位
  • package/apps/Settings/src/com/android/settings/datausage/DataUsagePreference.java
  @Overridepublic void setTemplate(NetworkTemplate template, int subId,NetworkServices services) {mTemplate = template;mSubId = subId;DataUsageController controller = new DataUsageController(getContext());DataUsageController.DataUsageInfo usageInfo = controller.getDataUsageInfo(mTemplate);setSummary(getContext().getString(R.string.data_usage_template,Formatter.formatFileSize(getContext(), usageInfo.usageLevel), usageInfo.period));setIntent(getIntent());}
  • frameworks/base/core/java/android/text/format/Formatter.java
  private static String formatRoundedBytesResult(@NonNull Context context, @NonNull RoundedBytesResult input) {//add for change 吉字节 to GB      final Locale locale = /*localeFromContext(context)*/Locale.US;//add endfinal NumberFormat numberFormatter = getNumberFormatter(locale, input.fractionDigits);if (input.units == MeasureUnit.BYTE || input.units == PETABYTE) {// ICU spells out "byte" instead of "B", and can't format petabytes yet.final String formattedNumber = numberFormatter.format(input.value);return context.getString(com.android.internal.R.string.fileSizeSuffix,formattedNumber, getSuffixOverride(context.getResources(), input.units));} else {return formatMeasureShort(locale, numberFormatter, input.value, input.units);}}/** {@hide} */public static BytesResult formatBytes(Resources res, long sizeBytes, int flags) {final RoundedBytesResult rounded = RoundedBytesResult.roundBytes(sizeBytes, flags);// add for change 吉字节 to GB   final Locale locale = /*res.getConfiguration().getLocales().get(0)*/Locale.US;// add endfinal NumberFormat numberFormatter = getNumberFormatter(locale, rounded.fractionDigits);final String formattedNumber = numberFormatter.format(rounded.value);final String units;if (rounded.units == MeasureUnit.BYTE || rounded.units == PETABYTE) {// ICU spells out "byte" instead of "B", and can't format petabytes yet.units = getSuffixOverride(res, rounded.units);} else { // Since ICU does not give us access to the pattern, we need to extract the unit string// from ICU, which we do by taking out the formatted number out of the formatted string// and trimming the result of spaces and controls.final String formattedMeasure = formatMeasureShort(locale, numberFormatter, rounded.value, rounded.units);final String numberRemoved = deleteFirstFromString(formattedMeasure, formattedNumber);units = SPACES_AND_CONTROLS.trim(numberRemoved).toString();}return new BytesResult(formattedNumber, units, rounded.roundedBytes);}
2.修改存储容量单位
  • package/apps/Settings/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
  // 不同类型标签private static final int[] ITEMS_SHOW_SHARED = new int[] {R.string.storage_detail_apps,R.string.storage_detail_images,R.string.storage_detail_videos,R.string.storage_detail_audio,R.string.storage_detail_system,R.string.storage_detail_other,};...private void addDetailItems(PreferenceGroup category, boolean showShared, int userId) {final int[] itemsToAdd = (showShared ? ITEMS_SHOW_SHARED : ITEMS_NO_SHOW_SHARED);for (int i = 0; i < itemsToAdd.length; ++i) {addItem(category, itemsToAdd[i], null, userId);}}private void addItem(PreferenceGroup group, int titleRes, CharSequence title, int userId) {if (titleRes == R.string.storage_detail_system) {if (mSystemSize <= 0) {Log.w(TAG, "Skipping System storage because its size is " + mSystemSize);return;}if (userId != UserHandle.myUserId()) {// Only display system on current user.return;}}StorageItemPreference item;if (mItemPoolIndex < mItemPreferencePool.size()) {item = mItemPreferencePool.get(mItemPoolIndex);} else {item = buildItem();mItemPreferencePool.add(item);}if (title != null) {item.setTitle(title);item.setKey(title.toString());} else {item.setTitle(titleRes);item.setKey(Integer.toString(titleRes));}item.setSummary(R.string.memory_calculating_size);item.userHandle = userId;addPreference(group, item);  //全部添加到布局中++mItemPoolIndex;}

追踪下来可以知道,这些标签都是StorageItemPreference

  • package/apps/Settings/src/com/android/settings/deviceinfo/StorageItemPreference.java
  public void setStorageSize(long size, long total) {setSummary(FileSizeFormatter.formatFileSize(getContext(),size,MeasureUnit.GIGABYTE,FileSizeFormatter.GIGABYTE_IN_BYTES));if (total == 0) {mProgressPercent = 0;} else {mProgressPercent = (int)(size * PROGRESS_MAX / total);}updateProgressBar();}

更新Summary有调用到FileSizeFormatter中的formatFileSize方法

  • package/apps/Settings/src/com/android/settings/utils/FileSizeFormatter.java
  private static String formatRoundedBytesResult(@NonNull Context context, @NonNull RoundedBytesResult input) {// add for change 吉字节 to GB   final Locale locale = /*localeFromContext(context)*/Locale.US;// add endfinal NumberFormat numberFormatter = getNumberFormatter(locale, input.fractionDigits);return formatMeasureShort(locale, numberFormatter, input.value, input.units);}public static String formatFileSize(@Nullable Context context, long sizeBytes, MeasureUnit unit, long mult) {if (context == null) {return "";}final RoundedBytesResult res = formatBytes(sizeBytes, unit, mult);return bidiWrap(context, formatRoundedBytesResult(context, res));}

Android O 里的网络流量使用、存储容量这两处位置的单位显示并非使用了不同语言的 values,而是使用了 Formatter 类来控制修改。

Android O 修改吉字节为GB相关推荐

  1. android 手机 吉字节,Java 数据类型05Android开发小典

    今天老何与大家分享Java中的数据类型,从一个大家相对感兴趣的话题聊起吧,随着智能手机与网络的普及,大家都办理了流量套餐,每到月底大家也非常关心有没有流量了?费用是如何被扣掉的? 好,让我们带着问题了 ...

  2. Android8.1 吉字节问题

    编译完Android8.1后,发现存储中都是"吉字节"等样式 原来在源码/external/icu/icu4c/source/data/unit目录有个 zh.txt 的文件. 搜 ...

  3. android APK内存多少字节,Android apk安全测评、应用加固、字节对齐、二次签名(有这一篇就够了)...

    本文将通过前言.apk安全测评.应用加固.字节对齐.二次签名.总结共6大版块来阐述 一.前言 评判一个App是否出色,除了看它的性能.体验外,本人认为最为重要的是它的安全性.市面上apk安全评测.加固 ...

  4. 【Android 应用开发】Android 工程修改包名流程 ( 修改 applicationId | 修改 package | 修改 R 资源引用 | 修改 BuildConfig 引用 )

    文章目录 一. Android 工程修改包名流程 二. 修改 applicationId 三. 修改 package 包名 四. AndroidManifest.xml 清单文件组件 五. 修改 R ...

  5. Android系统修改硬件设备访问权限

    Android系统修改硬件设备访问权限 在硬件抽象层模块文件(so)文件中,提供的函数调用open函数来打开设备文件,比如/dev/gpio,如果不修改设备文件/dev/gpio的访问权限,那么应用程 ...

  6. android 动态修改控件的宽高

    今天,简单讲讲android如何动态设置控件的宽高. 这个其实也比较简单,但是之前做的时候出现了问题,代码里设置的宽高是dx,需要先转成dp.下面以RelativeLayout作为例子,简单记录一下. ...

  7. Android日志[基础篇]二 Android Studio修改LogCat日志的颜色

    上一篇提到Android日志的5个级别的日志输出,在logcat里面设置自己喜欢或习惯的颜色,本文不只讲Android Sudio修改logcat的日志颜色. 代码和效果 代码 private voi ...

  8. Android 系统(123)---MTK android 常用修改点

    MTK android 常用修改点 1. *#06#等关键码判断文件 SpecialCharSequenceMgr.java 2.音效 ControlPanelEffect.java 3.版本号修改 ...

  9. android studio 修改文件后出现类型转换错误

    android studio 修改文件后出现类型转换错误,但检查不出毛病,后来as崩溃后,重新启动后,就正常了,百思不得其解

  10. android修改用户名和密码错误,Android应用开发Android Studio 修改用户名、密码、URL等操作教程...

    本文将带你了解Android应用开发Android Studio 修改用户名.密码.URL等操作教程,希望本文对大家学Android有所帮助. 修改用户名.密码: 在AndroidStudio的ter ...

最新文章

  1. java for 最后_Java的for循环中调用了查询服务,最后只打印了循环的最后一条数据(循环次数)次...
  2. 地平线:全球估值第一的AI芯片初创公司诞生!
  3. 如何插入8bit量化节点(tensorflow)
  4. 百度自动提交链接的php应用seo功能实例
  5. Archiva 2.2.3 安装运行的时候出现协议版本错误
  6. 智能化服务器怎么调,怎么设置dns 智能dns设置方法 【图文】
  7. c# winform 打印 窗体 及 窗体控件内容 的 初级尝试
  8. python安装osgeo库_python第三方库安装
  9. MATLAB 插值函数运用 - interp1
  10. 郭霖:手把手教你实现 App 360 度旋转看车效果
  11. 数据库原理和应用(2)—— 数据库系统的组成
  12. PCB板层简介+走线
  13. 微信公众号服务器配置但没有回调,微信公众号 “服务器配置” 踩坑记
  14. 天锋w2019_国产手机新选择:天锋W2019横空出世,体验感完全不输三星W2019
  15. 做一名优秀的软件开发qa_如何成为一名优秀的开发人员
  16. 微信小程序连接本地服务器(在本地服务器上进行真机测试-微信开发者工具)
  17. 中富金石老师靠谱分析:2022年国企改革将着力于三个方向
  18. 进制转换器java程序_java编写简易的进制转换器
  19. 两根香怎么测15分钟?
  20. 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(二)

热门文章

  1. 全球首场神经影像人机对决:AI战胜25位医界“最强大脑”!
  2. AWS Direct connect,VPC Peering,VPC endpoint
  3. python输入三个数形成各种三角形
  4. Java Web学习—编程1:数字三角形+三种解题思路+详细规律
  5. PET,CT图像融合笔记
  6. php不能撤销,word无法撤销怎么解决
  7. 论文格式修改之英文摘要
  8. EXCEL复合条饼图制作
  9. java excel 冻结_如何实现表格的首行冻结2
  10. flask-uploads文件上传