单个textview中的两种不同风格,具有不同的重力和高度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单个textview中的两种不同风格,具有不同的重力和高度相关的知识,希望对你有一定的参考价值。

我正在寻找一个看起来像的textview。我用下面的代码来实现这个..

SpannableString text;
    text = new SpannableString(bal_dollars.getText());
    int index = bal_dollars.getText().toString().indexOf(".");
    text.setSpan(new TextAppearanceSpan(getApplicationContext(),
            R.style.HeroGraphicBalanceSmallFont), index, bal_dollars
            .getText().toString().length(),
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    bal_dollars.setText(text, TextView.BufferType.SPANNABLE);

这是跨度中使用的样式..

<style name="HeroGraphicBalanceSmallFont" parent="@android:style/TextAppearance.Medium">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:textSize">50sp</item>
    <item name="android:singleLine">true</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_gravity">top|right</item>
    <item name="android:paddingBottom">30dp</item>
    <item name="android:gravity">top|right</item>
    <item name="android:textColor">@color/status_text</item>
    <item name="customFont">fonts/HeroicCondensedMedium.ttf</item>
</style>

一切看起来都很好,除了目标文本跨度的间距,即小数部分重力...我尝试了所有的xml属性。请帮忙

答案

我破解了它。我发布这个,因为它可能对其他人有帮助,并感谢@kcoppock提示。我扩展了MetricAffectingSpan类,它以一种改变字符宽度或高度扩展此类的方式影响字符级文本格式。

public class CustomCharacterSpan extends MetricAffectingSpan {
double ratio = 0.5;

public CustomCharacterSpan() {
}

public CustomCharacterSpan(double ratio) {
    this.ratio = ratio;
}

@Override
public void updateDrawState(TextPaint paint) {
    paint.baselineShift += (int) (paint.ascent() * ratio);
}

@Override
public void updateMeasureState(TextPaint paint) {
    paint.baselineShift += (int) (paint.ascent() * ratio);
}}

使用它来更新视图中的文本..

String string = tv.getText().toString();
    SpannableString text = new SpannableString(tv.getText());
    int index = tv.getText().toString().indexOf(".");
    text.setSpan(new CustomCharacterSpan(), index, string.length(),
            SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);//u can use ur own ratio using another constructor
    tv.setText(text, TextView.BufferType.SPANNABLE);

以上是关于单个textview中的两种不同风格,具有不同的重力和高度的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 两种具有不同清单文件的风格

C#以不同方式处理具有相同锁定的两种方法

Gradle 设置以处理具有相同代码库但依赖项不同的两种部署类型

使用多种模板/风格构建单个 Apk

如何避免打开同一个应用程序的两种风格的应用程序?

《Head First 设计模式》中组合迭代器重复打印的bug的两种解决方案