作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有以下字符串 RM123.456。我愿意
我几乎可以通过使用来实现它
spannableString.setSpan(new RelativeSizeSpan(0.50f), 0, index, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString, TextView.BufferType.SPANNABLE);
结果看起来像
但是,它与底部对齐。它与顶部不对齐。
我尝试使用 SuperscriptSpan
。好像
它不符合我的要求
SuperscriptSpan
不会使文本变小。我无法控制它的大小。SuperscriptSpan
将使文本“在顶部对齐”请问,我怎样才能让 RelativeSizeSpan 与顶部完全对齐?
这是我希望达到的目标。
请注意,我们不希望使用 2 个 TextViews 解决方案。
最佳答案
但是我是这样做的:
activity_main.xml:
<TextView
android:id="@+id/txtView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:textSize="26sp" />
MainActivity.java:
TextView txtView = (TextView) findViewById(R.id.txtView);
SpannableString spannableString = new SpannableString("RM123.456");
spannableString.setSpan( new TopAlignSuperscriptSpan( (float)0.35 ), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE );
txtView.setText(spannableString);
TopAlignSuperscriptSpan.java:
private class TopAlignSuperscriptSpan extends SuperscriptSpan {
//divide superscript by this number
protected int fontScale = 2;
//shift value, 0 to 1.0
protected float shiftPercentage = 0;
//doesn't shift
TopAlignSuperscriptSpan() {}
//sets the shift percentage
TopAlignSuperscriptSpan( float shiftPercentage ) {
if( shiftPercentage > 0.0 && shiftPercentage < 1.0 )
this.shiftPercentage = shiftPercentage;
}
@Override
public void updateDrawState( TextPaint tp ) {
//original ascent
float ascent = tp.ascent();
//scale down the font
tp.setTextSize( tp.getTextSize() / fontScale );
//get the new font ascent
float newAscent = tp.getFontMetrics().ascent;
//move baseline to top of old font, then move down size of new font
//adjust for errors with shift percentage
tp.baselineShift += ( ascent - ascent * shiftPercentage )
- (newAscent - newAscent * shiftPercentage );
}
@Override
public void updateMeasureState( TextPaint tp ) {
updateDrawState( tp );
}
}
希望这会对你有所帮助。
关于android - 如何使 RelativeSizeSpan 对齐到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964034/
我尝试并排使用两个 RelativeSizeSpan,但两者之间出现了很大的差距。看看我想要实现什么以及我得到了什么。 这就是我构建 Spanned 实例的方式 String formatte
我有以下字符串 RM123.456。我愿意 使 RM 相对较小 使 RM 与顶部完全对齐 我几乎可以通过使用来实现它 spannableString.setSpan(new RelativeSizeS
我是一名优秀的程序员,十分优秀!