首页 > 解决方案 > SpannableStringBuilder 中文本和图像之间的对齐未居中

问题描述

所以我添加了一个快餐栏来通知用户成功或失败......但是文本和图标没有正确对齐,我不知道如何正确地做到这一点

fun notifyUserMessage(context: Context, contextView: View, message: String, 
  notificationType: NotificationTypes = NotificationTypes.ERROR){
    val builderTextLeft = SpannableStringBuilder()
    builderTextLeft.append("    $message")
    builderTextLeft.setSpan(ImageSpan(context, R.drawable.ic_alertcircle), 0, 1, 0)
    builderTextLeft.setSpan(
        AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 0,
        builderTextLeft.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
    )
    val snackbar = Snackbar.make(contextView, builderTextLeft, Snackbar.LENGTH_LONG)
        .setBackgroundTint(context.getColor(setBackground(notificationType)))
        .setTextColor(context.getColor(R.color.gainsboro_00))

    val params = snackbar.view.layoutParams as FrameLayout.LayoutParams
    params.gravity = Gravity.TOP
    params.height = 250

    snackbar.animationMode = BaseTransientBottomBar.ANIMATION_MODE_FADE
    snackbar.show()
}

但结果看起来像:

在此处输入图像描述

我希望文本与图标正确对齐,但还要确保“文本+图标”都在小吃栏中居中。

任何想法 ?

标签: androidkotlinandroid-notificationsandroid-snackbar

解决方案


试试这个解决方案:

 public static SpannableStringBuilder decorateProTagInString(String name, Activity activity) {
        
            SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
            spannableStringBuilder.append(name);
            if (spannableStringBuilder.length() > 0) {
                try {

                    spannableStringBuilder.setSpan(new RelativeSizeSpan(0.8f), spannableStringBuilder.length() - 7, spannableStringBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    spannableStringBuilder.setSpan(new RoundedBackgroundSpan(activity), spannableStringBuilder.length() - 7, spannableStringBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                } catch (Exception exp) {
                    exp.printStackTrace();
                }

            }
            return spannableStringBuilder;
        
        return null;
    }

函数调用:

AppUtils.decorateProTagInString(image + "message", activity);

否则请遵循答案链接

感谢和赞赏。


推荐阅读