Android DataBinding 学习(二)

2023-11-15

dataBinding(二)

【1】在布局中使用vm变量进行资源判断

场景:点击按钮,对应的圆和按钮本身的背景颜色发生改变,不需要单独在代码中设置其背景色,可以直接在布局中镶嵌

 

VM:

public  class TestVM {
    public ObservableBoolean isGreenGradient = new ObservableBoolean();
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <import type="android.view.View" />

        <variable
            name="viewModel"
            type="com.tzbc.databindtest.TestVM" />
    </data>

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/ivGradient"
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:background="@{viewModel.isGreenGradient ? @drawable/green_gradient : @drawable/yellow_gradient}" />

            <Button
                android:id="@+id/btGradient"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_marginLeft="20dp"
                android:background="@{viewModel.isGreenGradient ? @drawable/button_green_bg : @drawable/button_yellow_bg}"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:text="@string/gradientText"
                android:textColor="@color/yellowEnd"
                android:textSize="12sp" />
        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="30dp"
            android:layout_marginRight="20dp"
            android:background="@drawable/view_line" />

    </LinearLayout>
</layout>

activity:

package com.tzbc.databindtest;

import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;

import com.tzbc.databindtest.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "tzbc";
    private TestVM testVM;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        testVM = new TestVM();
        testVM.isGreenGradient.set(true);
        activityMainBinding.setViewModel(testVM);

        activityMainBinding.btGradient.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btGradient:
                testVM.isGreenGradient.set(!testVM.isGreenGradient.get());
                break;
        }
    }

}

资源文件:

string:

<string name="gradientText">click to change gradient</string>
<string name="gradientGreen">Green</string>
<string name="gradientYellow">Yellow</string>

view_line:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="@color/black"/>

</shape>
<color name="black">#1A000000</color>
<color name="buttonBg">#569DA7</color>
<color name="buttonBg1">#F1A12B</color>
<color name="greenStart">#15611B</color>
<color name="greenMiddle">#60C964</color>
<color name="greenEnd">#83CC30</color>
<color name="yellowStart">#FF9800</color>
<color name="yellowMiddle">#E6CE08</color>
<color name="yellowEnd">#FAED82</color>
green_gradient:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <gradient
        android:endColor="@color/greenEnd"
        android:startColor="@color/greenStart" />
</shape>
yellow_gradient:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <gradient
        android:endColor="@color/yellowEnd"
        android:startColor="@color/yellowStart" />
</shape>

button_green_bg:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="@color/buttonBg" />
    <corners android:radius="20dp" />
</shape>
button_yellow_bg:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="@color/buttonBg1" />
    <corners android:radius="20dp" />
</shape>

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android DataBinding 学习(二) 的相关文章

随机推荐

  • 不同岛屿的数量

    694 不同岛屿的数量 这道题要给出不同岛屿的数量 最直观的想法就是对发现的不同岛屿进行序列化 然后把序列化结果存到HashSet 那怎么序列化呢 其实比较类似于二叉树的序列化 记录遍历顺序 方向 这里用 1 2 3 4 代表上下左右 1
  • 全网最详细网络安全学习路线!手都给我码酸了!

    零基础小白 学完掌握可就业 入门到入土的网安学习路线 在各大平台搜的网安学习路线都太粗略了 看不下去了 我把自己报班的系统学习路线 整理拿出来跟大家分享了 本文为纯干货纯文字内容 需要详细学习路线图以及配套资料的同学可留言或者后台踢我免费分
  • 什么是计算机视觉

    计算机视觉 让计算机 看懂 和视频 这是什么场景 画面里都有什么 人 车和房子在什么位置 目标在做什么 目标间有什么关系 视觉是自然智能不可思议的结晶 猕猴的大脑皮层中视觉部分占据大约50 人脑中有关视觉的部分所占比重大 人类大脑对视觉进行
  • Linux下EC20实现ppp拨号

    硬件描述 EC20模块封装成标准的PCIe接口 和系统之家通讯主要通过usb通讯 系统描述 此处使用的是Linux 3 0 1 一 驱动支持 首先需要对Linux内核驱动做一定的修改 使操作系统能够支持EC20 1 Add VID add
  • Windows 无法启动MySql服务 (位于 本地计算机上)错误2: 系统找不到指定的文件

    错误 Windows 无法启动MySql服务 位于 本地计算机上 错误2 系统找不到指定的文件 错误原因 服务的路径与安装的路径不一致 之前安装过mysql后卸载重装容易出现这样的问题 解决方法 修改windows注册表 windows r
  • DC-DC升压电路

    目录 实验目的 课程条件 原理框图和实验思路 实验原理图 电路图分析
  • memcached server LRU 深入分析

    Memcached 人所皆知的remote distribute cache 不知道的可以javaeye一下下 或者google一下下 或者baidu一下下 但是鉴于baidu的排名商业味道太浓 从最近得某某事件可以看出 所以还是建议jav
  • 【Java基础】异常

    文章目录 1 基本信息 2 Throwable 体系 2 1 Exception 2 2 Error 2 3 常见的 Exception 和 Error 3 异常的处理 3 1 抛出异常throw 3 2 捕获异常try catch fin
  • OpenAI API(ChatGPT)接口地址https://api.openai.com/v1/chat网络问题无法访问Error: connect ECONNREFUSED ETIMEDOUT

    https api openai com v1 chat是openAI的API接口地址 因为长城的原因 23年年初一次更新后便无法访问 访问接口会提示Error connect ETIMEDOUT等网络相关的问题 解决办法有三种 本文只做方
  • 分类算法的R语言实现案例

    最近在读 R语言与网站分析 书中对分类 聚类算法的讲解通俗易懂 和数据挖掘理论一起看的话 有很好的参照效果 然而 这么好的讲解 作者居然没提供对应的数据集 手痒之余 我自己动手整理了一个可用于分类算法的数据集 下载链接 csdn下载频道搜索
  • Java实现将数字转化为繁体汉字表示

    在CSDN论坛上看到了一个帖子 要求用Java实现将数字转化为繁体汉字表示 如 输入一个数字将其转化为大写 比如输入整型1034 得到 壹仟零叁拾肆 看了之后感觉挺有意思的 自己也就写了一个 代码如下 实现将数字转化为繁体汉字表示 impo
  • TensorFlow2学习(一):介绍及安装测试

    TensorFlow是什么 从计算机发明之初 人们就希望它能够帮助甚至代替人类完成重复性劳作 利用巨大的存储空间和超高的运算速度 计算机已经可以非常轻易地完成一些对于人类非常困难 但对计算机相对简单的问题 比如统计一本书中不同单词出现的次数
  • 使用vuex完成加入购物车案例

    需求 当点击了加入购物车按键后 把商品添加到购物车中 步骤 先获取商品的数据 保存到仓库中 将数据保存到本地存储 在购物车页面 从本地进行调用数据 进行页面渲染 页面组成
  • python3 根据ip获取国家

    pip install geoip2 https blog csdn net hxm6621315 article details 127774378
  • Python-打印螺旋矩阵

    问题描述 输入N 打印 N N 螺旋矩阵 比如 N 3 打印 1 2 3 8 9 4 7 6 5 N 4 打印 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 思路 常规法是不断的对数据边界进行判断会很复杂 不
  • vue界面转为静态html,html静态页面通过vue实现数据动态化

    看完觉得有用记得给个赞奥 你的赞就是我的动力 1 引入vue 引入jQuery 因为等下用Ajax请求数据用到jQuery 如 2 初始化并绑定vue 首先在自己的网页body内添加一个div包括所有内容 并给这个div设置id 如 Doc
  • 对象在内存中的初始化过程

    参考 1 https blog csdn net WantFlyDaCheng article details 81808064 2 深入理解java虚拟机 Student s new Student 为例 1 首先查看类的符号引用 看是否
  • EC纠删码(Erasure Code)校验码算法相比传统RAID5有哪些优势?

    EC纠删码 Erasure Code 校验码算法相比传统RAID5有哪些优势 1 EC算法是跨节点的 4 2 1的冗余允许1个节点故障而不丢失数据 RAID5一般是由节点内的若干块盘组成RAID组的 只能容忍硬盘故障 不能容忍节点故障 2
  • 0基础速通html

    一 基础认知 1 网页 网页组成 文字 图片 音频 视频 超链接 程序员写的代码是通过什么软件转换成网页的 浏览器 2 浏览器 是网页显示 运行的平台 是前端开发必备利器 常见的五大浏览器 IE浏览器 火狐浏览器 谷歌浏览器 Safari浏
  • Android DataBinding 学习(二)

    dataBinding 二 1 在布局中使用vm变量进行资源判断 场景 点击按钮 对应的圆和按钮本身的背景颜色发生改变 不需要单独在代码中设置其背景色 可以直接在布局中镶嵌 VM public class TestVM public Obs