gpt4 book ai didi

android - 如何使 RelativeSizeSpan 对齐到顶部

转载 作者:IT老高 更新时间:2023-10-28 21:43:03 25 4
gpt4 key购买 nike

我有以下字符串 RM123.456。我愿意

  • 使 RM 相对较小
  • 使 RM 与顶部完全对齐

我几乎可以通过使用来实现它

spannableString.setSpan(new RelativeSizeSpan(0.50f), 0, index, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString, TextView.BufferType.SPANNABLE);

结果看起来像

enter image description here

但是,它与底部对齐。它与顶部不对齐。

我尝试使用 SuperscriptSpan。好像

enter image description here

它不符合我的要求

  • SuperscriptSpan 不会使文本变小。我无法控制它的大小。
  • SuperscriptSpan 将使文本“在顶部对齐”

请问,我怎样才能让 RelativeSizeSpan 与顶部完全对齐

这是我希望达到的目标。

enter image description here

请注意,我们不希望使用 2 个 TextViews 解决方案。

最佳答案

但是我是这样做的:

enter image description here

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com