前阵子我把 ColorOS 那套「骚扰拦截 + 来电标记」搬进了自己编的 LineageOS:标记库、响铃前拒接、通话记录打标,都跑通了。但每次电话进来,跳出来的还是 AOSP 原版那个通话界面——灰扑扑一块,六个按钮挤在底下,像 2016 年的安卓。
功能都齐了,脸还是旧的,这事我一直忍着。忍到上周给通话加实时字幕的时候,终于忍不了了:字幕面板往那个界面上一放,怎么摆都别扭。索性推倒重画,照着 iPhone 的通话界面来。
一屏只干一件事
iPhone 通话界面好在哪?好在它一屏只干一件事。背景是糊掉的联系人照片,中间是名字和号码,底下六个圆按钮,再底下一个大红挂断。没有多余的框、多余的线、多余的灰。
我照这个骨架重排:
- 背景:联系人头像放大 1.35 倍铺满,再叠 48dp 高斯模糊;没头像的号码,就按号码哈希出四个色团当底,上面压一层竖向暗渐变,保证白字永远读得清。
- 中部:实时字幕面板,毛玻璃一大块。
- 下部:3×2 六个毛玻璃圆键——静音、键盘、免提、录音、字幕、标记。
- 最底:iOS 红(
#FF453A)的挂断键,76dp,带一圈同色柔光。

第一版背景我图省事,色相完全由号码哈希随机出。截出来一看:橄榄绿、泥巴黄、猪肝紫,一屏一个脸色,像打翻了调色盘又没搅匀。改成四个固定基色(蓝 212°、紫 268°、青 188°、暖棕 24°),哈希只允许在基色上抖 ±24°,脸色立刻正常了。随机不是个性,是事故。
那个坑了我两小时的黑方块
毛玻璃按钮的做法很朴素:白 16% 半透明填充,加一圈 1dp 白 24% 的发丝描边。真机没有 backdrop blur 的免费午餐,Modifier.blur() 只糊自己那层,糊不了背后的内容,所以「玻璃感」全靠这层半透明白撑着。
第一版我顺手给每个圆键加了 Modifier.shadow(6.dp),想着有点投影更立体。截屏一看,六个圆键里各蹲着一个深色圆角方块,像玻璃底下压了块脏东西。
查了一圈才明白:elevation 阴影是画在填充下面的。填充是 16% 的白,近乎透明,于是阴影从玻璃底下透了上来,方方正正一块黑。不透明底板上阴影藏在板子后面没人看见,半透明底板上它就是主角。
删掉 shadow,黑方块没了。半透明填充下面永远别垫 elevation,这条我用两小时和六张废截图换的,记下来。
字幕三态:展开、收起、隐藏
实时字幕是分段识别的,一句一句往上滚。但通话界面不是字幕播放器,大多数人打电话不想盯着一屏字。所以字幕键做成三态循环:
- 展开:整块面板,上滑翻历史,自动跟随最新一句;
- 收起:压成一条,只留最近一句;
- 隐藏:面板彻底消失,只在右上角留一颗小胶囊「识别中 N 句」,点一下回到展开。


按一次字幕键走一格:展开 → 收起 → 隐藏 → 展开。状态写进 SharedPreferences,下次通话接着上次的样子。第一版只有展开和收起两态来回切,隐藏态根本进不去——按钮逻辑写成了 toggle 而不是 cycle,这种 bug 不上真机点十次发现不了。
号码被标成骚扰类的时候,归属地旁边那颗标签会变红,提醒你这通电话接得值不值:

通话中也能标:横向标签,一排三个
标记面板原来只在挂断之后出现。这次把它也请进了通话中——点「标记」键,从底下升起一张 sheet,标签横向排、一排三个、可以点多个:

上面七类是「拦下来」:骚扰电话、广告推销、疑似诈骗、高风险号码、房产中介、保险理财、出租司机——标了以后这个号再打进来,响铃前直接拒接。下面五类是「放行」:快递外卖、客服售后、生活服务、招聘猎头、装修维修——盖过标记库,这个号永远不拦。
规则只有一条:只要挂了一类「拦下来」就拦。拦是保护,放行是例外,例外不能压过保护。一个号同时是「快递外卖」和「骚扰电话」,它就得被拦。
没有真电话,怎么验 UI
这套界面没法靠打真电话验——我手上没有会准时打进来的测试号。办法是给自己开一扇后门:一个调试广播 TEST_INCALL_UI,往界面总线里灌一通假通话(号码、归属地、标记、通话时长、七句快递对话全是预设的),然后起通话 Activity 截屏。
中间还撞了一堵墙:广播接收器里 startActivity 被系统的后台启动限制(BAL)拦了,而通话 Activity 是 exported=false,shell 身份也起不来。绕法是 userdebug 的 ROM 上 adb root 再 am start,验完立刻 adb unroot。截图上面那些状态栏时间 08:16、08:17,就是这五个状态一个个点出来的。
现在就能用,不用等镜像
有人问:改完是不是得重新编 ROM 刷进去才能用?
不用。签名后的 APK 直接 adb install 到 /data/app,现在这台机器上跑的就是新界面,上面五张图全是真机截的。ROM 源码树里 vendor/ 那份我也同步替换了,但它要等下一次整包编译才会进 /product/priv-app——那只影响以后刷机、换机或者恢复出厂的场景。日常用,装上去就是它。
界面这东西,功能对了只算及格,脸对了才算完工。之前那版能拦骚扰、能打标、能出字幕,但我每次接电话看见它,心里都咯噔一下。现在不咯噔了。
值了。
评论
0 条评论