使用 WRAP_CONTENT 时 TextView ShadowLayer 被剪裁

TextView ShadowLayer being Clipped when Using WRAP_CONTENT

我已经有一段时间没有发帖了,我已经阅读了很多帖子来尝试解决我的问题,但我似乎无法弄清楚。 我遗漏了一些东西,我希望有人能帮助我理解我做错了什么。

在此示例中,我在线性布局中有一个 TextView,其中 LayoutParams 设置为 MATCH_PARENT。 如果我将 WRAP_CONTENT 与 TextView 一起使用,则阴影会被剪裁,即使我使用 Padding 也是如此。 如果我将 TextView 设置为 MATCH_PARENT 则不会剪裁阴影。

TextView WRAP_CONTENT 无填充:

带内边距的 TextView WRAP_CONTENT

文本视图MATCH_PARENT:

我什至尝试过 ll.setClipToPadding(假); ll.setClipChildren(假);

我错过了什么?

不幸的是,我认为您没有遗漏任何东西。这似乎是 TextView 如何测量斜体文本的错误。即使没有阴影也是个问题。

您必须子类化 TextView(或 AppCompatTextView)并定义自定义测量行为来解决此问题。

如果您不想为此烦恼,一致的 "best" 答案是在您的文本末尾添加一个不间断的 space 以增加测量的大小文本。不幸的是,这通常比您真正想要的 space 多。

顺便说一句,android:clipToPadding 只是 ViewGroup 上的一个属性,这就是为什么当您将它应用到 TextView 时它不会做任何事情(它只是被忽略,例如任何其他未知属性)。

这可能是非常糟糕的做法,但我采用了以下方法:

tv.setHeight(tv.getHeight() + tv.getPaddingTop() + tv.getPaddingBottom());
tv.setWidth(tv.getWidth() + tv.getPaddingLeft() + tv.getPaddingRight());
tv.setPadding(0, 0, 0, 0);

结果:

再次感谢本对我的帮助!