Android 使用WRAP_内容时剪裁的TextView阴影层

Android 使用WRAP_内容时剪裁的TextView阴影层,android,textview,ondraw,Android,Textview,Ondraw,我已经有一段时间没有发帖了,我读了很多帖子试图解决我的问题,但我似乎无法理解。 我错过了一些东西,我希望有人能帮助我理解我做错了什么 在本例中,我在线性布局中有一个TextView,其LayoutParams设置为匹配父项。 如果我在文本视图中使用WRAP_内容,阴影将被剪裁,即使我使用了填充。 如果我将TextView设置为与父项匹配,则不会剪裁阴影 TextView包装内容无填充: TextView使用填充对内容进行换行 TextView匹配父项: 我甚至试过用它 ll.setclip

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

在本例中,我在线性布局中有一个TextView,其LayoutParams设置为匹配父项。 如果我在文本视图中使用WRAP_内容,阴影将被剪裁,即使我使用了填充。 如果我将TextView设置为与父项匹配,则不会剪裁阴影

TextView包装内容无填充:

TextView使用填充对内容进行换行

TextView匹配父项:

我甚至试过用它 ll.setcliptoppaddingfalse; ll.setClipChildrenfalse


我遗漏了什么?

不幸的是,我不认为你遗漏了什么。这似乎是TextView如何测量斜体文本的一个错误。即使没有阴影,这也是一个问题

您必须将TextView或AppCompatTextView子类化,并定义自定义度量行为来解决此问题

如果你不想为此烦恼,最好的答案是在文本末尾添加一个不间断的空格,以增加文本的测量大小。不幸的是,这通常会增加超出您实际需要的空间


顺便说一句,android:CliptPadding只是ViewGroup上的一个属性,这就是为什么当你将它应用到TextView时它不做任何事情,它只是被忽略,就像任何其他未知的属性一样。

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

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


再次感谢本帮助我

我尝试在文本前后添加一个空格,对于较小的文本大小,效果很好。一旦你们开始使用一个大的文本大小,正如你们所说的,它会消耗大量的不动产。注意:我在LinearLayout上使用了.setCliptPadding和.setClipChildren,这是TextView的父视图。啊,我误解了你的剪辑策略。不幸的是,正是TextView在进行剪辑,因此您在父对象上设置的任何剪辑属性在这种情况下都不会起任何作用。感谢您的帮助!