EditText 文本下方的行是如何创建的?

How is the line under the text of an EditText created?

默认情况下 android.widget.EditText 的文本下方有一行。这在技术上究竟是如何做到的?我检查了 EditText class 的 source code,但找不到这是在哪里完成的?

我想知道这条线在技术上是一个背景,但是这个背景在哪里设置?特别是,由于它只是一个背景,Android 如何确保这条线绘制在文本下方而不是其后?非常感谢带有证明/来源链接的答案。

是的,这个下划线是背景,可能是 ColorStateList(例如,按下时它会改变颜色),但是如果你 运行 你的代码在 Android 4.x 或更早版本(预 Material 设计),则此背景已修复 bitmap/drawable

EditText 有一个 android:background 属性,但它也存在于所有其他 View 中。所以它设置在 View 的源代码中,而不是扩展 EditText。 styling/theming 设置了指向适当背景可绘制对象的指针(在 HERE 中有一些示例)

EditText 正在使用 TextPaintgetPaint 方法),可用于向字母添加一些额外的间距 between/over/under/next 以确保不重叠。 drawable 也可能具有 padding 属性 - 可以在最后一行像素中画线,但将底部填充设置为 1px 并确保此 View 的内容(在本例中为 EditText ) 将不会绘制 under/over 填充(但 drawable 会绘制)-如果 wrap_content 的高度

会更快 View 扩展一点

很抱歉回答不那么准确,主题需要更多的研究和来源搜索,但也许我的观点可以帮助您自己找到答案