【问题标题】:Alignment in SpannableStringBuilder between text and image not centeredSpannableStringBuilder 中文本和图像之间的对齐未居中
【发布时间】:2021-11-25 04:07:12
【问题描述】:

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

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()
}

但结果看起来像:

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

有什么想法吗?

【问题讨论】:

    标签: android kotlin android-notifications android-snackbar


    【解决方案1】:

    试试这个解决方案:

     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);
    

    否则按照这个:Answer Link

    感谢和感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多