【问题标题】:textview cutting off a letter in androidtextview在android中切断一个字母
【发布时间】:2012-05-01 20:53:35
【问题描述】:

这是我的安卓系统的屏幕截图。文本是“asd”。但是“d”被略微切断。这是相关的观点:

        <TextView
            android:id="@+id/stuff"
            android:padding="2dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/other_stuff"
            android:layout_marginTop="33dp"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textStyle="italic" />

知道是什么原因造成的吗?

【问题讨论】:

  • 请在此处粘贴所有 xml 文件,而不仅仅是 textview。
  • 您是否尝试删除填充? (如果有效,只需将其更改为边距)
  • 这种情况在 2019 年仍在发生。这还没有解决吗?肯定是个bug。 wrap_content 应该知道如何处理斜体文本。

标签: android


【解决方案1】:

使用此代码:

textview.setShadowLayer(25f, 0f, 0f, 0)

【讨论】:

    【解决方案2】:

    这是由于 Android 为标准文本设置了TextView 剪切矩形,而您使用了斜体文本。斜体文本向右倾斜,超出文本范围。出于某种原因,Android 没有考虑到这一点。

    为防止这种情况,您可以通过给TextView 赋予文本阴影来强制其在其边界之外绘制。如果将阴影颜色设置为透明,则结果只是未剪辑的文本。将这些添加到您的TextView

    android:shadowColor="#00FFFFFF"
    android:shadowDx="48"
    android:shadowDy="0"
    android:shadowRadius="1"
    

    另外,如果这不起作用,请尝试在父布局上设置 android:clipChildren=false

    【讨论】:

      【解决方案3】:

      最终得到了一个 hacky 解决方案,即在最后一个斜体字符后添加一个空格

      【讨论】:

      • 为了后代,我会记下我的经历。这发生在多个设备上的斜体字体(甚至到 Jellybean)。更改填充属性什么也没做。只有两个 hacky 事情起作用:(1)设置一个比它需要的更宽的固定宽度和(2)以编程方式在末尾添加一个空格,如下所示: tv.setText(tv.getText() + " ");
      • 对于仍在为此苦苦挣扎的任何人,我创建了一个通用方法来解决这个问题。 stackoverflow.com/a/44218468/4420543
      【解决方案4】:

      要缩小错误来源,请尝试设置android:letterSpacing="0" 这就是我的案例中截断字母的原因。另一个关于字母间距过大的提示是,当文本中有更多字母时,被截断的部分会变大。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,但在使用某些字体时遇到了EditText。我的解决方案也适用于TextView

        1. 使用填充

        2. 作为TextViewonDraw 方法中使用Canvas.clipRect(float, float, float, float) 进行裁剪 - 创建自定义Canvas 类并覆盖此方法(留空)。

        3. 接下来创建自定义 TextView 并覆盖两个方法 onSizeChangedonDraw

        onSizeChanged 中创建大小为TextView 和我们自定义Canvas 的位图。

        onDraw 中,首先通过将我们的自定义Canvas 传递给方法super.onDraw 来绘制位图。之后将位图绘制到目标 сanvas。

        在我对类似问题here的回答中更详细

        【讨论】:

          【解决方案6】:

          好吧,这很奇怪,但我从 android:maxLines="1" 更改为 android:singleLine="true",现在文本没有被截断。

          【讨论】:

          • *注意:android:singleLine 已弃用
          • 我知道 android:singleLine 已被弃用,但在某些情况下,使用 android:maxLines="1" 会导致文本被截断。这显然是一个错误。
          【解决方案7】:

          这是我的解决方案: 格式化文本视图和测量。之后设置宽度为 1 像素的 textview 添加到测量的宽度。

              TextView textView = new TextView(this);
              textView.setText("Text blah blah");
              textView.setTypeface(typeface, Typeface.BOLD_ITALIC)
              textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
              textView.setLayoutParams(new LayoutParams(textView.getMeasuredWidth() + 1, LayoutParams.WRAP_CONTENT));
          

          为我工作。希望这些帮助。

          【讨论】:

            【解决方案8】:

            你总是可以创建自定义 TextView 来使用例如这个字体(因为事实上这是 italic 类型的问题):

            Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-LightItalic.ttf");
            setTypeface(tf);
            

            更多详情here.

            【讨论】:

              【解决方案9】:

              我通过将 TextView 的宽度设置为 fill_parent 而不是 wrap_content 来修复它...

              【讨论】:

                【解决方案10】:

                这里的问题是,斜体属性。你必须为你的文本视图设置一个特定的宽度。

                【讨论】:

                  【解决方案11】:

                  我怀疑如果您不使用斜体文本,则不会出现此问题。我会先测试一下,如果使用非斜体文本正确呈现它,那么它看起来像一个呈现问题,需要在 TextView 中使用额外的填充来解决斜体字母的空间。

                  【讨论】:

                    【解决方案12】:

                    你可以使用。

                    android:layout_width="fill_parent"
                    

                    代替

                    android:layout_width="wrap_content"
                    

                    【讨论】:

                      猜你喜欢
                      • 2019-03-18
                      • 2012-03-20
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-04-06
                      相关资源
                      最近更新 更多