【问题标题】:TextView ShadowLayer being Clipped when Using WRAP_CONTENT使用 WRAP_CONTENT 时,TextView ShadowLayer 被裁剪
【发布时间】:2019-01-02 21:14:47
【问题描述】:

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

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

TextView WRAP_CONTENT 无填充:

带有填充的TextView WRAP_CONTENT

TextView MATCH_PARENT:

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

我错过了什么?

【问题讨论】:

    标签: android textview ondraw


    【解决方案1】:

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

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

    如果您不想为此烦恼,一致的“最佳”答案是在文本末尾添加一个不间断的空格,以增加文本的测量大小。不幸的是,这通常会比您真正想要的增加更多空间。

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

    【讨论】:

    • 我尝试在文本前后添加一个空格,对于较小的文本大小,它可以正常工作。正如您所说,一旦您开始使用大文本大小,它就会消耗大量空间。注意:我在作为 TextView 的父视图的 LinearLayout 上使用 .setClipToPadding 和 .setClipChildren。
    • 啊,我误解了你的剪辑策略。不幸的是,是 TextView 进行剪辑,所以在这种情况下,您在父级上设置的任何剪辑属性都不会做任何事情。
    • 感谢您的帮助!
    【解决方案2】:

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

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

    结果:

    再次感谢 Ben 帮助我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      相关资源
      最近更新 更多