我试图找出Android中的双向数据绑定库。我想通过更改xml中的android:enabled属性来启用/禁用LinearLayout(以及内部的RelativeLayout)。
XML部分如下所示:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:gravity="center"
android:enabled="@={viewModel.asd}"
ndroid:onClick="@{()-> viewModel.doSomething()}"
android:background="@drawable/shortcut_button_label_selector"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="40dp"
android:layout_height="match_parent"
android:enabled="@={viewModel.asd}"
android:background="@drawable/shortcut_button_icon_selector">
Run Code Online (Sandbox Code Playgroud)
现在,我要执行此操作的原因是由于这两个选择器(shortcut_button_label_selector和shortcut_button_icon_selector),它们看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@color/grey_300"></item>
<item
android:state_enabled="true"
android:drawable="@color/menubar_background"></item>
</selector>
Run Code Online (Sandbox Code Playgroud)
我希望能够根据View上的enabled属性动态更改背景。之所以选择启用的属性,是因为我在LinearLayout上遇到了onClick事件,需要禁用它(使其不可点击)。我对android:clickable属性有同样的问题。
当我尝试编译它时,出现错误
java.lang.RuntimeException:发现数据绑定错误。**** /数据绑定错误**** msg:在android.widget.LinearLayout上找不到值类型为boolean的属性“ android:enabled”的获取器。
该viewModel.asd只是一个公共布尔/ ObservableBoolean,我都试过。
谁能解释这是怎么回事,为什么我会收到错误消息?我可以在View类(布局扩展)中看到isEnabled / setEnabled方法。
我有什么方法可以继续前进,还是必须完全改变?
//编辑:我可能不需要双向绑定。.我不再知道 //编辑继续:它可能需要对ViewModel继承做一些事情:
布局文件具有类型为abMainViewModel的viewModel,但是字段asd是abBaseViewModel(MainViewModel扩展了BaseViewModel)。现在,我想要这样做的是,如果我从扩展BaseViewModel的任何其他视图更新asd字段,它将自动更新enabled属性。
它也不能与Strings ..我猜这是继承的东西
亲切的问候,Marcin
我正在开发一个 Angular 应用程序,并试图找出处理 SVG 的最佳方法:
将它们用作背景图像、img 标签的 src 属性等。 - 我失去了使用 CSS 设置 SVG 样式的能力。另一方面,它非常易于使用,我不必复制/粘贴内容
使用第 3 方应用程序为我们发出请求,并将 SVG 放入具有指令的容器中 - 例如https://www.npmjs.com/package/ng-inline-svg - 它会发出我想要的 HTTP 请求喜欢回避。不过,我可以使用 CSS 设置图像样式
将 SVG 直接放入组件模板中 - 无需提出任何额外请求,并且我可以完全控制样式。但这会降低代码的可重用性。
我想完全避免 HTTP 请求的原因是因为我们有多个主题(相同的 SVG,但颜色不同),并且我希望每个“图像”最多加载一个资源。
有什么我可以使用的好的做法吗?有什么开源代码可以看一下吗?
第三种选择还好吗?也许我可以编写一个 Angular 服务并以某种方式对内联 SVG 进行分组,但我现在没有任何想法。
亲切的问候,马尔辛