Android R.fraction

来源

我是在看Android10原生代码,绘制状态栏蓝牙电量相关类中第一次看到R.fraction的,如类BatteryMeterDrawable

复制代码
<fraction name="battery_button_height_fraction">10%</fraction>

mButtonHeightFraction = context.getResources().getFraction(

R.fraction.bt_battery_button_height_fraction, 1, 1);

方法解释

复制代码
public float getFraction(@FractionRes int id, int base, int pbase) 
源码中方法解释如下:
Retrieve a fractional unit for a particular resource ID.
Params:
id – The desired resource identifier, as generated by the aapt tool. This integer encodes the package, type, and resource entry. The value 0 is an invalid identifier. base – The base value of this fraction. In other words, a standard fraction is multiplied by this value. pbase – The parent base value of this fraction. In other words, a parent fraction (nn%p) is multiplied by this value.
Returns:
Attribute fractional value multiplied by the appropriate base value.
Throws:
Resources.NotFoundException – Throws NotFoundException if the given ID does not exist.

用处

我自己没用过,待补充

测试

分别测试fraction的两种声明:有p的跟没p的

<item name="fraction" type="fraction">30%</item>

<item name="fraction" type="fraction">30%p</item>

测试没p的:

测试案例1:保持第三个参数不变

测试:

复制代码
        //<item name="fraction" type="fraction">30%</item>
        float fraction1 = this.getResources().getFraction(R.fraction.fraction, 1, 1);
        float fraction2 = this.getResources().getFraction(R.fraction.fraction, 2, 1);
        float fraction3 = this.getResources().getFraction(R.fraction.fraction, 3, 1);
        float fraction4 = this.getResources().getFraction(R.fraction.fraction, 4, 1);

结果:

分析:

都是30%乘以第二个参数(base)

测试案例1:第三个参数改变

测试:

复制代码
        //<item name="fraction" type="fraction">30%</item>
        float fraction1 = this.getResources().getFraction(R.fraction.fraction, 1, 2);
        float fraction2 = this.getResources().getFraction(R.fraction.fraction, 1, 3);
        float fraction3 = this.getResources().getFraction(R.fraction.fraction, 2, 2);
        float fraction4 = this.getResources().getFraction(R.fraction.fraction, 2, 3);

结果:

分析:

都是30%乘以第二个参数(base)

总结以上两个测试案例可知:在没p的情况下,getFraction方法返回的结果就是乘以第二个参数;

测试有p的:

测试:

复制代码
        //<item name="fraction" type="fraction">30%p</item>
        float fraction1 = this.getResources().getFraction(R.fraction.fraction, 1, 2);
        float fraction2 = this.getResources().getFraction(R.fraction.fraction, 1, 3);
        float fraction3 = this.getResources().getFraction(R.fraction.fraction, 2, 2);
        float fraction4 = this.getResources().getFraction(R.fraction.fraction, 2, 3);

结果:

分析:

都是30%乘以第三个参数(pbase)

相关推荐
恋猫de小郭6 分钟前
Dart 3.15 新特性:this 终于支持类型提升了
android·前端·flutter
ii_best35 分钟前
ios手机开发安卓脚本开发软件[按键精灵教程]从「找最小值」到「Boss 最近刷新」再到「屏幕范围极值」
android·ios·智能手机·自动化·按键精灵
开开心心就好1 小时前
安卓PDF处理工具,免费无广告零弹窗
android·服务器·开发语言·算法·pdf·ocr
墨狂之逸才1 小时前
扫码枪响了,应用却没收到:一次 Android USB 线材问题排查
android
alexhilton13 小时前
Room Fts4:全文搜索替代 SQL LIKE
android·kotlin·android jetpack
hai_android18 小时前
把 Android App 打包成系统应用(System App)
android·kotlin·android jetpack
JMchen18 小时前
【Jetpack 内核实战 01】开篇:Jetpack 组件全家桶核心逻辑与专栏完整规划
android·kotlin·android jetpack
骑着蜗牛撵大象32720 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
hunterandroid21 小时前
Retrofit 网络请求的异常处理与重试策略实战
android
sejinan21 小时前
极致轻量与秒级起播:NativeWasmTv 开源硬核技术解析与升级版体验
android·开源·webview·tv