android – 在字符级别更改EditText中的行距行高

android – 在字符级别更改EditText中的行距行高,第1张

概述我在EditText的开头和结尾都实现了粗体,大,不可编辑的“智能引号”: 引号是文本中不可选择的部分,我在其上设置了RelativeSizeSpan(2f).结果几乎是我想要的. s.setSpan(spanLeft, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);s.setSpan(spanRight, s.length() - 1, s.length( 我在EditText的开头和结尾都实现了粗体,大,不可编辑的“智能引号”:

引号是文本中不可选择的部分,我在其上设置了relativeSizeSpan(2f).结果几乎是我想要的.

s.setSpan(spanleft,1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);s.setSpan(spanRight,s.length() - 1,s.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

但是,您可以看到更大的字体会导致更大的高度影响整条线.这在第一行上是不相关的,但在最后一行令人不快.我想知道这两个字符是否可以保持字体大小但是降低行高.

我想减少前导部分,以便第一行和最后一行与段落的其余部分具有一致的高度.我最高的愿望是将报价转化为基线,同时保持其外观.

你有什么建议吗?这可能通过一些跨度吗?我应该放弃吗?你看到任何解决方法吗?

我看到我可以使用引号创建两个png并使用ImageSpan(虽然我从未使用它并且不知道它是如何工作的),但它对我来说有点烦人(我不是真的很喜欢图形).

解决方法 我相信您必须实现自定义Span,只需将updateMeasureState保留为空:)尝试使用

import androID.text.TextPaint;import androID.text.style.MetricAffectingSpan;public class TestSubScriptSpan extends MetricAffectingSpan {    private final float mProportion;    public TestSubScriptSpan(float proportion) {        mProportion = proportion;    }    @OverrIDe    public voID updateMeasureState(TextPaint p) {        // DO nothing!    }    @OverrIDe    public voID updateDrawState(TextPaint tp) {        tp.setTextSize(tp.getTextSize() * mProportion);        tp.baselineshift -= (int) (tp.ascent() / 2);    }}

然后

TestSubScriptSpan tss = new TestSubScriptSpan(2.0f);s.setSpan(tss,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);s.setSpan(tss,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

注意你在updateDrawState()中所做的事情的顺序,因为它很重要.

总结

以上是内存溢出为你收集整理的android – 在字符级别更改EditText中的行距/行高全部内容,希望文章能够帮你解决android – 在字符级别更改EditText中的行距/行高所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1123551.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存