gpt4 book ai didi

android - 为什么将 ImageSpan 添加到 Snackbar 的操作文本在 Android 设备 SDK 级别 26 上有效,但在 SDK 级别 25 上无效?

转载 作者:行者123 更新时间:2023-12-03 19:09:09 31 4
gpt4 key购买 nike

我想显示 Snackbar并使用图像而不是文本进行操作。
我使用以下代码:

    val imageSpan = ImageSpan(this, R.drawable.star)
val builder = SpannableStringBuilder(" ")
builder.setSpan(
imageSpan,
0,
1,
SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
)
Snackbar.make(findViewById(R.id.container), "Hello Snackbar", Snackbar.LENGTH_INDEFINITE)
.setAction(builder) {}.show()
drawable_star是矢量图形 Assets ,但 png 也是如此.
在 26 级及以上的 Android 设备上,这会产生:
pic1
正如预期的那样,而在设备 lvl 25 上,图像不可见:
pic2
有人知道原因以及是否有解决方法吗?
PS:你可以在这里查看我的测试项目: https://github.com/fmweigl/SpannableTest

最佳答案

这是由于 textAllCaps奥利奥之前版本的错误。那Button的默认样式将该属性设置为 true ,这只会导致 Button的文本被转换为全部大写。该转换是通过平台 AllCapsTransformationMethod 完成的。类,在 Nougat 7.1 及以下版本中,会将所有内容视为平面 String s,基本上剥离了您设置的任何格式跨度。
解决方法是关闭该属性,并在代码中处理您自己可能需要的任何大写转换。 Snackbar提供snackbarButtonStyle属性作为设置 Action 样式的方法Button ,我们可以创建一个简单的样式来修改该值。例如,从您的 styles.xml :

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>

<item name="snackbarButtonStyle">@style/NoCapsButton</item>>
</style>

<style name="NoCapsButton" parent="Widget.AppCompat.Button">
<item name="textAllCaps">false</item>
</style>
(如果您使用的是 Material Components 主题,则 parentNoCapsButton 应改为 Widget.MaterialComponents.Button.TextButton.Snackbar。)

在这种特定情况下,这就是您需要做的所有事情,因为没有要转换的文本。

关于android - 为什么将 ImageSpan 添加到 Snackbar 的操作文本在 Android 设备 SDK 级别 26 上有效,但在 SDK 级别 25 上无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62819964/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com