【问题标题】:Tightly wrap gaps in background of multiple lines of text in TextView在 TextView 中的多行文本的背景中紧密包裹间隙
【发布时间】:2018-03-05 02:03:52
【问题描述】:

我已经编写了 XML 代码来显示一个带有绿色背景的 TextView:

但是,我希望第二行文本左右的空间完全透明,没有任何绿色背景——通常更靠近文本。

这是一张图片,描绘了左侧应该透明的部分(尽管我希望两边都是透明的)。

现在我知道我可以通过使用两个相互叠加的 TextView 并在两个视图之间拆分 Java 代码中的文本来完成此操作。由于它们是分开的,因此它们将各自换行,因此底部视图上的文本将被紧紧包裹,而不会受到顶部视图换行的影响/扩展。

但是,理想情况下,我希望在 XML 中或更优雅的解决方案中执行此操作。这可以使用 XML 来完成,还是我需要坚持我提出的使用多个 TextView 的解决方案?

【问题讨论】:

    标签: android xml android-layout textview android-xml


    【解决方案1】:

    你以前知道图形文本混合吗?此代码将帮助您:

    String str="this bit of text spans more than one line.Words words words";
        int bstart=0;
        int bend=str.length();
    
        SpannableStringBuilder style=new SpannableStringBuilder(str);
        style.setSpan(new BackgroundColorSpan(ContextCompat.getColor(this,R.color.colorGreenTra)),bstart,bend, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        TextView tvColor=(TextView) findViewById(R.id.tv_color);
        tvColor.setText(style);
    

    在 XML 中:

    <TextView
        android:id="@+id/tv_color"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="this bit of text spans more than one line.Words words words"
        />
    

    效果:

    【讨论】:

    • 我认为我们不能通过系统 api 在 XML 中设置背景。如果您只想使用 XML 来执行此操作,也许您必须绘制一个扩展 TextView 的视图。但是 SpannableStringBuilder 非常强大。我们总是在弹幕上使用它。
    • 谢谢,这解决了我的问题。给这个添加填充是不是很困难?
    • 给TextView添加内边距并不难。
    • 我的意思是跨越背景。定期在 xml 或 java 中添加填充不会影响 SpannableStringBuilder 的背景。
    猜你喜欢
    • 2019-02-19
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多