Android TextView SpannableString多个字体大小不一致的情况下,设置字体垂直居中显示

1、我的TextView。

<TextView

                    android:id="@+id/tev_title"

                    android:layout_width="match_parent"

                    android:layout_height="@dimen/dp_50"

                    android:gravity="center"

                    android:text="@string/create_user"

                    android:textColor="@color/color_FFFFFFFF"

                    android:textSize="@dimen/sp_17" />


2、res下的values文件夹下的strings.xml文件的资源字符串。

<string name="created_b">创建了</string>

    <string name="users_b">个用户</string>


3、TextView Style 管理类。

package com.phone.common_library.manager;

import android.content.Context;

import android.graphics.Typeface;

import android.text.Spannable;

import android.text.SpannableString;

import android.text.style.AbsoluteSizeSpan;

import android.text.style.StyleSpan;

import android.widget.TextView;

import com.phone.common_library.spannable.VerticalAlignTextSpan;

public class TextViewStyleManager {

    private static final String TAG = TextViewStyleManager.class.getSimpleName();

    public static void setTextViewStyle(TextView textView,

                                        String data,

                                        int start) {

        Spannable spannable = new SpannableString(data);

        // 粗体

        spannable.setSpan(new StyleSpan(Typeface.BOLD), start, data.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

        // 显示

        textView.setText(spannable);

    }

    public static void setTextViewStyle(Context context,

                                        TextView textView,

                                        String data,

                                        int start,

                                        int end,

                                        float size) {

        Spannable spannable = new SpannableString(data);

        // 粗体

        spannable.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

        spannable.setSpan(new AbsoluteSizeSpan(ScreenManager.spToPx(context, size)), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

        // 显示

        textView.setText(spannable);

    }

    public static void setTextViewStyleVerticalCenter(Context context,

                                        TextView textView,

                                        String data,

                                        int start,

                                        int end,

                                        float size) {

        Spannable spannable = new SpannableString(data);

        // 粗体

        spannable.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

        spannable.setSpan(new AbsoluteSizeSpan(ScreenManager.spToPx(context, size)), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

        //SpannableString字体大小不一致垂直居中显示

        spannable.setSpan(new VerticalAlignTextSpan(context, size), start, end, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE);

        // 显示

        textView.setText(spannable);

    }

}


4、在Activity中设置SpannableString多个字体大小不一致的情况下,设置字体垂直居中显示。

TextViewStyleManager.setTextViewStyleVerticalCenter(this,

                    tevTitle, getResources().getString(R.string.created_b)

                            + 3

                            + getResources().getString(R.string.users_b),

                    getResources().getString(R.string.created_b).length(),

                    getResources().getString(R.string.created_b).length() + 1,

                    28);


5、效果如下(见下图一,图中红圈处的3这个字最大,而且这个字水平居中显示了)。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容