Android:使用 SuperscriptSpan 时更改上标的垂直位置
Android: Change vertical position of superscript when using SuperscriptSpan
在我的应用程序中,我尝试使用 SuperscriptSpan
来显示一个点。但是我想改变这个点相对于顶部的边距,最好是 0。这就是结果的样子。
我希望点与 textView 的顶部对齐,而现在它位于中间的某个位置。
这是我的代码:
SpannableStringBuilder cs = new SpannableStringBuilder("MyText.");
cs.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
提前致谢!
如果您想更改 SuperscriptSpan
的默认行为,您必须创建自己的自定义子类并重写 updateDrawState()
and updateMeasureState()
.
您可以查看 the source code 的 SuperscriptSpan
以了解它们目前是如何实施的。像这样的东西会使点比你现在看到的更高:
@Override
public void updateDrawState(@NonNull TextPaint textPaint) {
textPaint.baselineShift += (int) ((2 * textPaint.ascent()) / 3);
}
@Override
public void updateMeasureState(@NonNull TextPaint textPaint) {
textPaint.baselineShift += (int) ((2 * textPaint.ascent()) / 3);
}
在我的应用程序中,我尝试使用 SuperscriptSpan
来显示一个点。但是我想改变这个点相对于顶部的边距,最好是 0。这就是结果的样子。
我希望点与 textView 的顶部对齐,而现在它位于中间的某个位置。
这是我的代码:
SpannableStringBuilder cs = new SpannableStringBuilder("MyText.");
cs.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
提前致谢!
如果您想更改 SuperscriptSpan
的默认行为,您必须创建自己的自定义子类并重写 updateDrawState()
and updateMeasureState()
.
您可以查看 the source code 的 SuperscriptSpan
以了解它们目前是如何实施的。像这样的东西会使点比你现在看到的更高:
@Override
public void updateDrawState(@NonNull TextPaint textPaint) {
textPaint.baselineShift += (int) ((2 * textPaint.ascent()) / 3);
}
@Override
public void updateMeasureState(@NonNull TextPaint textPaint) {
textPaint.baselineShift += (int) ((2 * textPaint.ascent()) / 3);
}