我在textview / editview中格式化文本时遇到了问题。问题是如果文本以换行符结尾,则最后一行(空)根本不使用任何样式。这是代码的原因:https://github.com/android/platform_frameworks_base/blob/master/core/java/android/text/Layout.java#L1723 除非样式类似于BulletSpan,否则无关紧要。
在我的情况下,正是这个问题 - 一个bulletspan,一个空行,我想要渲染空的跨度。似乎解决它的唯一方法是在EditView的末尾添加零宽度空间。 (Android EditText: How to create an empty bullet paragraph by BulletSpan?)但是我将不得不处理可能删除它的编辑。
到目前为止,我找到的解决方案是将SpannableStringBuilder子类化并从我自己的Editable.Factory返回给我的EditText。我的SpannableStringBuilder必须检查最后一个字符是否为换行符,并在这种情况下添加零宽度空格。我将不得不在构造函数和replace
方法中执行此操作。问题是 - 我不知道android代码实际上会对我的可编辑做什么。
我实际上尝试使用一些“实际”字符来实现类似的东西,结果我将该字符复制,复制,粘贴等等。我试图管理选择,不允许SELECTION_START和SELECTION_END永远在最后的文字。当我的编辑文本获得或失去焦点时,这些符号仍然是随机复制的。
是否有实际显示空子弹的理智和可靠方法?
我尝试过的其他可能的解决方法:
人工绘制项目符号无效 - 如果光标位于最后一个位置,它将位于编辑文本的左边缘,而不是BulletSpan的左边距。
仅为最后一行设置单独的edittext将正确显示内容。但是我在处理退格时会遇到问题。
对EditText进行子类化,不可编辑 - 我无法处理超过“尾随”字符的选择。选择直接应用于可编辑,而不是EditText。