小编Mar*_*cin的帖子

android:enabled属性的双向数据绑定

我试图找出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

android 2-way-object-databinding android-databinding

5
推荐指数
1
解决办法
4012
查看次数

在 Angular 应用程序中嵌入 SVG 图像

我正在开发一个 Angular 应用程序,并试图找出处理 SVG 的最佳方法:

  1. 将它们用作背景图像、img 标签的 src 属性等。 - 我失去了使用 CSS 设置 SVG 样式的能力。另一方面,它非常易于使用,我不必复制/粘贴内容

  2. 使用第 3 方应用程序为我们发出请求,并将 SVG 放入具有指令的容器中 - 例如https://www.npmjs.com/package/ng-inline-svg - 它会发出我想要的 HTTP 请求喜欢回避。不过,我可以使用 CSS 设置图像样式

  3. 将 SVG 直接放入组件模板中 - 无需提出任何额外请求,并且我可以完全控制样式。但这会降低代码的可重用性。

我想完全避免 HTTP 请求的原因是因为我们有多个主题(相同的 SVG,但颜色不同),并且我希望每个“图像”最多加载一个资源。

有什么我可以使用的好的做法吗?有什么开源代码可以看一下吗?

第三种选择还好吗?也许我可以编写一个 Angular 服务并以某种方式对内联 SVG 进行分组,但我现在没有任何想法。

亲切的问候,马尔辛

svg caching inline-svg angular

5
推荐指数
0
解决办法
4837
查看次数