android - setDrawableByLayerId 不适用于透明的默认可绘制对象
问题描述
我想在layer-list
当前项目中动态设置可绘制图片。我做了如下的最小测试用例。
对于活动,它只是一个onCreate
函数:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.btn_draw_activity_dyn)
val drawBtn = findViewById<Button>(R.id.draw_btn)
drawBtn.setOnClickListener {
Toast.makeText(this@MainActivity, "Gotta you", Toast.LENGTH_LONG).show()
}
val layerDrawable = resources.getDrawable(R.drawable.start_icon_drawable_dyn) as LayerDrawable
layerDrawable.setDrawableByLayerId(R.id.drawPic1, ContextCompat.getDrawable(this@MainActivity, R.drawable.bodhi))
}
布局xml文件(btn_draw_activity_dyn.xml
)只是一个<Button>
,我需要设置drawableStart
<Button
android:id="@+id/draw_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dynamic Button"
android:drawableStart="@drawable/start_icon_drawable_dyn"
/>
最后是start_icon_drawable_dyn.xml
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="@android:color/transparent" />
<stroke
android:width="3dp"
android:color="@android:color/white" />
<size
android:width="40dp"
android:height="40dp" />
</shape>
</item>
<item android:id="@+id/drawPic1"
android:drawable="@android:color/transparent"/>
</layer-list>
PS:在使用setCompoundDrawablesWithIntrinsicBounds
时,我需要layer-list
稍后将其更新为几个项目,例如:
<item android:id="@+id/drawPic1"
android:drawable="@android:color/transparent"/>
<item android:id="@+id/drawSun"
android:drawable="@android:color/transparent"
android:gravity="end"
android:height="15dp"
android:width="15dp"/>
而且里面的图片layer-list
会从后端服务器获取,可能不适合静态设置。
解决方案
当您将图像插入可绘制图层时,它不会刷新视图。这就是为什么它看起来像以前一样。
我猜这不是一个好方法。当您想要更新图像时,最好使用它。
- 制作 2 个持久文件。一个带有椭圆形,一个带有图像。
当想要更新它时,使用这行代码进行更新。
view.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_checked, 0, 0, 0);
推荐阅读
- r - keras 代码以任意数量的 class_weigths 运行
- ios - 在 FBSDKCoreKit 中的“SKProd”类型的对象上找不到属性“subscriptionPeriod”
- reactjs - 使用 styled-components、React 和 Flow 设置自定义组件的样式
- android - 安装 OneSingle 插件后 ionic build 出错
- sql - Performance: WHERE IN clause vs (INSERT + INNER JOIN)
- android - 保留版本的 targetSdkVersion 限制
- php - Symfony 3 +__isInitialized__: false
- vba - VBA Word 无法插入换行符
- jquery - JQUERY - how to make text display as its containing div box is sliding left to right?
- r - R ggplot2:如何将美学参数用作函数的一部分?