如何在TextView Android(或自定义snackbar Android)附近点亮可绘制的左侧



我使用android的自定义SnackBar,我创建了SnackBar,带有一个图标和一条消息。图标绘制不像预期的那样工作。页边距文字比预期的要长。所以,这就是我所做的:SnackBar-1

期望的自定义零食栏是:snackbar -2我怎样才能得到预期的输出?非常感谢。

下面是我的代码:
fun showSuccessFullMsg(message: String, anchorView: View) {
val snackBarView = Snackbar.make(binding.root, message, Snackbar.LENGTH_LONG)
val view = snackBarView.view
val params = view.layoutParams as FrameLayout.LayoutParams
snackBarView.setBackgroundTint(resources.getColor(android.R.color.white))
params.gravity = Gravity.TOP
params.gravity = Gravity.CENTER_HORIZONTAL
val actionBarHeight = anchorView.height
params.setMargins(32, actionBarHeight.plus(36), 32, 0)
view.layoutParams = params
val textView = view.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
textView.textAlignment = View.TEXT_ALIGNMENT_CENTER
val drawable = resources.getDrawable(
R.drawable.ic_double_check,
resources.newTheme()
)
(textView.layoutParams as LinearLayout.LayoutParams).gravity = Gravity.CENTER_HORIZONTAL
drawable.bounds = Rect(0, 0, 32, 24)
textView.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, null, null, null)
textView.isSingleLine = true
textView.ellipsize = TextUtils.TruncateAt.END
view.background =
ContextCompat.getDrawable(
this,
com.proxglobal.ringtone.R.drawable.bg_snackbar
) // for custom background
snackBarView.animationMode = BaseTransientBottomBar.ANIMATION_MODE_FADE
snackBarView.setTextColor(Color.parseColor("#23C16B"))
snackBarView.show()
}

删除

textView.textAlignment = View.TEXT_ALIGNMENT_CENTER

并以编程方式在TextView的开头添加填充。你必须从TextView, drawable和text的大小来计算要应用多少填充。

第二种方法是使用ImageSpan将可绘制对象添加到文本本身。

感谢@Cheticamp的回答。最后,这是我的代码:

@SuppressLint("PrivateResource", "UseCompatLoadingForDrawables")
fun showSuccessFullMsg(message: String, anchorView: View) {
val drawable = resources.getDrawable(
R.drawable.ic_double_check,
resources.newTheme()
)
drawable.bounds = Rect(0, 0, 64, 48)
val imageSpan = ImageSpan(drawable, ImageSpan.ALIGN_BASELINE)
val sp = SpannableString("  $message")
sp.setSpan(imageSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE)
val snackBarView = Snackbar.make(binding.root, sp, Snackbar.LENGTH_LONG)
val view = snackBarView.view
val params = view.layoutParams as FrameLayout.LayoutParams
snackBarView.setBackgroundTint(resources.getColor(android.R.color.white))
params.gravity = Gravity.TOP
params.gravity = Gravity.CENTER_HORIZONTAL
val actionBarHeight = anchorView.height
params.setMargins(32, actionBarHeight.plus(36), 32, 0)
view.layoutParams = params
val textView = view.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
textView.textAlignment = View.TEXT_ALIGNMENT_CENTER
(textView.layoutParams as LinearLayout.LayoutParams).gravity = Gravity.CENTER_HORIZONTAL
textView.isSingleLine = true
textView.ellipsize = TextUtils.TruncateAt.END
view.background =
ContextCompat.getDrawable(
this,
R.drawable.bg_snackbar
) // for custom background
snackBarView.animationMode = BaseTransientBottomBar.ANIMATION_MODE_FADE
snackBarView.setTextColor(Color.parseColor("#23C16B"))
snackBarView.show()
}

最新更新