我有一个字符串[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
约束:
C
,F
,Am
,G
)是可单击的,因此,如果您对TextView进行自定义实现,它仍然必须能够处理ClickableSpans
或以其他方式使其可单击] >如果有帮助,这是我的一个开源项目,因此该源可在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]
请注意,和弦(指的是吉他手会演奏的和弦,例如
C
或F
)包裹在[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足够大时,它可以容纳它包装它应该(并且确实)看起来...
我认为此解决方案可以解决问题。但是有一些假设,
这是基于Hein Htet Aung's answer。一般的想法是,您传入了两行(singleLyric
),但是可能需要在添加这些行之前对其进行处理(因此中间是while
循环)。为方便起见,此代码是使用参数appendTo
编写的,歌词将附加到该参数。它返回带有歌词的完成的SpannableStringBuilder
。它会像这样使用: