gpt4 book ai didi

Android数据绑定(bind),如何在drawable中绑定(bind)数据?

转载 作者:行者123 更新时间:2023-11-29 01:11:28 26 4
gpt4 key购买 nike

我有这个可绘制的自定义进度条:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<solid android:color="@color/marm_color_blue_palette_light_primary"></solid>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<solid android:color="@color/marm_color_blue_palette_accent"></solid>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="@color/marm_color_blue_palette_accent"></solid>
</shape>
</clip>
</item>
</layer-list>

如何使用 DataBinding 设置这些颜色?我是 Android 数据绑定(bind)的新手,我来自 Windows Phone MVVM。

我知道,对于 Activity 布局,您必须这样做:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.androidadvance.androidsurvey.R" />
<variable
name="dynamicUI" type="com.example.DynamicConfigModel" />
</data>

<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@{dynamicUI.mainBg, default=@color/color_palette_light_divider_text_12}"
android:orientation="vertical">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@{dynamicUI.darkPrimary , default=@color/marm_color_blue_palette_dark_primary}"
android:titleTextColor="@{dynamicUI.textLight, default=@android:color/white}"
/>

</LinearLayout>
</layout>

在Java中

ContentLayoutBinding binding = DataBindingUtil.setContentView(this, R.layout.YOURLAYOUT);
binding.setDynamicUI(YOURMODEL);

一般如何在可绘制对象或样式中做到这一点?

最佳答案

因为数据绑定(bind)基本上是在编译时生成的代码,所以它目前只为布局设计。如果您尝试在可绘制对象、样式或菜单中使用它,它将不起作用。

我知道不幸的是架构不完整,但您会注意到,每当您在布局文件周围添加布局标签时,它都会生成一个 NameOfActivityBinding 类,它会在其中为您编写管理元素更改的所有样板代码。因此,虽然对我们来说它只是看起来像 xml 指向一个变量,但 Android 仍在为您编写所有样板。

除了我们仍然可以看到它仍处于早期阶段之外,这与其他框架并没有太大不同。

您可以在自定义控件中创建一些属性更改处理程序,然后利用自定义控件菜单或其他自定义类来替换您要将可绘制对象分配给的类。然后自定义类可以利用绑定(bind),但这会带来更多的工作,而不仅仅是在代码中更改可绘制内容。

我做过的一件事是监视各个项目上的事件,然后像这样更改可绘制对象的色调。

   @JvmStatic
@BindingAdapter("backgroundDrawableChange")
fun backgroundDrawableChange(view: RelativeLayout, isSelected: Boolean){
var bgDrawable: LayerDrawable = view.background as LayerDrawable
var shape: GradientDrawable = bgDrawable.findDrawableByLayerId(R.id.shapeId) as GradientDrawable
shape.setColor(Color.parseColor((if (isSelected) YACustomPreference.getInstance(view.context).getPrimaryColorHex() else YACustomPreference.getInstance(view.context).getWhite())))
}

然后我会将其附加到我正在监视更改的属性。

      <RelativeLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal"
tools:visibility="gone"
android:background="@drawable/rounded_bottom_right_button"
app:backgroundDrawableChange="@{drawerItemModel.isSelected}"
android:visibility="@{drawerItemModel.useRightAlignText ? View.VISIBLE : View.GONE}"
android:gravity="center" />

这是一个简单的行点击监视器,具有用户定义的颜色,显然无法在可绘制对象中绑定(bind)颜色,因此这是次佳选择。希望对您有所帮助。

我知道这并不完全是您所追求的,但至少可能会让您走上正确的道路或给您一个想法。

关于Android数据绑定(bind),如何在drawable中绑定(bind)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42667921/

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