gpt4 book ai didi

android - 使用数据绑定(bind)为 Button 加载 drawableLeft 图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:33 25 4
gpt4 key购买 nike

我有一个带有图标和文本的按钮。

enter image description here

这是通过以下代码实现的:

            <Button
...
android:drawableLeft="@drawable/ghana"
android:drawableStart="@drawable/ghana"
android:text="@string/hint_ghana"

/>

当我这样做时,数据绑定(bind)适用于文本但不适用于图标:

            <Button
...
android:drawableLeft="@{countryOfResidence.thumbnail}"
android:drawableStart="@{countryOfResidence.thumbnail}"
android:text="@{countryOfResidence.countryName}"

/>

这是结果:

enter image description here

我一直在寻找解决此问题的方法,但找不到任何解决方案,因为大多数人都专注于将图像加载到 ImageView 中。

我的模型类如下所示:

public class CountryOfResidence {

private String countryName;
private int thumbnail;


public CountryOfResidence(String countryName, int thumbnail) {
this.setCountryName(countryName);
this.setThumbnail(thumbnail);
}
....

在调用 Activity 的 onCreate() 方法中,我正在这样做

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivitySignUpBinding signUpBinding = DataBindingUtil.setContentView(this, R.layout.activity_sign_up);
MyHandler myHandler = new MyHandler();
signUpBinding.setMyHandler(myHandler);

mViewFlipper = (ViewFlipper) findViewById(R.id.signUpViewFlipper);

countryOfResidenceList = new ArrayList<>();
countryOfResidenceList.add(new CountryOfResidence("Nigeria", R.drawable.nigeria));
countryOfResidenceList.add(new CountryOfResidence("Ghana", R.drawable.ghana));
countryOfResidenceList.add(new CountryOfResidence("Kenya", R.drawable.kenya));

signUpBinding.setCountryOfResidence(countryOfResidenceList.get(1));

最后,我的布局中的数据标签是这样的

<data>

...
<variable
name="countryOfResidence"
type="orem_tech.com.teylur.model.CountryOfResidence"/>
</data>

有什么建议吗?

最佳答案

您似乎将资源 ID 传递给 android:drawableLeft 属性而不是 Drawable。默认情况下,android 数据绑定(bind)会自动将整数转换为 ColorDrawable,因为它假定它们是颜色。

有几种方法可以解决这个问题。首先是添加方法:

public Drawable loadDrawable(Context context, int resourceId) {
return context.getDrawable(resourceId);
}

然后像这样绑定(bind)它:

android:drawableLeft="@{MyUtil.loadDrawable(countryOfResidence.thumbnail)}"

您还可以将 thumbnail 设为 Drawable 而不是 int:

public final ObservableField<Drawable> thumbnail = new ObservableField<Drawable>();

您还可以创建自己的 BindingAdapter 来接受 int 参数。遵循 TextViewBindingAdapter 中的示例:

@BindingAdapter({"android:drawableLeft"})
public static void setDrawableLeft(TextView view, int resourceId) {
Drawable drawable = ContextCompat.getDrawable(view.getContext(), resourceId);
setIntrinsicBounds(drawable);
Drawable[] drawables = view.getCompoundDrawables();
view.setCompoundDrawables(drawable, drawables[1], drawables[2], drawables[3]);
}

private static void setIntrinsicBounds(Drawable drawable) {
if (drawable != null) {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
}
}

如果执行上述操作,您将无法使用数据绑定(bind)将整数颜色设置为可绘制对象。如果你想分开它,你可以使用不同的(应用程序命名空间)属性。但是您可能不需要将颜色可绘制对象设置为 drawableLeft

关于android - 使用数据绑定(bind)为 Button 加载 drawableLeft 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44145219/

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