在具有范围的Android TextView中一次换行两行

问题描述 投票:1回答:2

摘要

我有一个字符串[tab] [ch]C[/ch] [ch]Am[/ch] \n I heard there was a secret chord[/tab]

当TextView足够大而没有包装时,它应该(并且确实)看起来像这样:

  C                  Am         
I heard there was a secret chord

当行太长而无法容纳在TextView中时,我希望它像这样包装:

  C                
I heard there was a 
  Am
secret chord

现在,它像这样包装(就像您希望它只是文本一样)

  C                
 Am         
I heard there was a
secret chord

约束:

  • 我使用等宽字体来保持对齐
  • 和弦(CFAmG)是可单击的,因此,如果您对TextView进行自定义实现,它仍然必须能够处理ClickableSpans或以其他方式使其可单击] >
  • Kotlin或Java(或XML)可以使用
  • 如果有帮助,这是我的一个开源项目,因此该源可在Github上找到。这是fragment source(查找fun processTabContent(text: CharSequence),这是我现在在此处处理文本的地方。这是layout xml


输入格式

我的数据存储在单个字符串中(无法更改-我从API获取)。以下是上面标签的格式:

[Intro]\n[tab][ch]C[/ch] [ch]Am[/ch] [ch]C[/ch] [ch]Am[/ch][/tab]\n[Verse 1][tab]      [ch]C[ch]                  [ch]Am[/ch]                         I heard there was a secret chord               [/tab][tab]      [ch]C[/ch]                     [ch]Am[/ch]\nThat David played, and it pleased the Lord[/tab][tab]   [ch]C[/ch]                [ch]F[/ch]               [ch]G[/ch]\n But you don't really care for music, do you?[/tab]

请注意,和弦(指的是吉他手会演奏的和弦,例如CF)包裹在[ch]标签中。我目前有找到这些的代码,删除[ch]标记,并将每个和弦包裹在ClickableSpan中。单击时,我的应用程序显示了另一个片段,其中包含有关如何弹奏吉他和弦的说明。这仅是重要的,因为对该问题的答案必须允许仍然像这样单击这些和弦。

我现在正在做什么(不起作用)

您可能已经注意到,这是我们将不得不重点关注的[tab]标签。现在,我正在检查字符串,并用换行符替换[tab],并删除[/tab]的所有实例。如果我的TextView的文本大小足够小,以至于整行都可以显示在设备屏幕上,则可以正常工作。但是,当自动换行开始时,我开始遇到问题。

此:

  C                  Am         
I heard there was a secret chord

应该换成这个:

  C                
I heard there was a 
  Am
secret chord

但是而是像这样包装:

  C                
 Am         
I heard there was a
secret chord

总结我有一个字符串[tab] [ch] C [/ ch] [ch] Am [/ ch] \ n我听说有一个秘密的和弦[/ tab]当TextView足够大时,它可以容纳它包装它应该(并且确实)看起来...

java android kotlin textview word-wrap
2个回答
2
投票

我认为此解决方案可以解决问题。但是有一些假设,


0
投票

这是基于Hein Htet Aung's answer。一般的想法是,您传入了两行(singleLyric),但是可能需要在添加这些行之前对其进行处理(因此中间是while循环)。为方便起见,此代码是使用参数appendTo编写的,歌词将附加到该参数。它返回带有歌词的完成的SpannableStringBuilder。它会像这样使用:

© www.soinside.com 2019 - 2024. All rights reserved.