You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何正确获取并比较TextView的背景颜色?

解决两个TextView背景颜色比较的问题

嘿,这问题我之前也踩过坑!你直接比较Drawable对象或者用equals()没效果的原因是:哪怕用的是同一个white.xml资源,系统默认会给每个View创建独立的Drawable实例,所以对象引用肯定不一样,equals()自然也不会返回true。

下面给你两种靠谱的解决方案,根据你的white.xml类型选就行:

方案1:如果white.xml是纯色Shape(最常用场景)

如果你的white.xml是类似这样的纯色背景:

<!-- res/drawable/white.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
</shape>

那可以把Drawable转换成ColorDrawable,直接比较颜色值:

public void getColor(View view) {
    Drawable bgText1 = findViewById(R.id.text1).getBackground();
    Drawable bgText2 = findViewById(R.id.text2).getBackground();

    // 先判断背景是否为ColorDrawable类型
    if (bgText1 instanceof ColorDrawable && bgText2 instanceof ColorDrawable) {
        int color1 = ((ColorDrawable) bgText1).getColor();
        int color2 = ((ColorDrawable) bgText2).getColor();

        if (color1 == color2) {
            // 颜色相同,执行你的业务逻辑
            Toast.makeText(this, "两个TextView背景颜色一致", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "两个TextView背景颜色不同", Toast.LENGTH_SHORT).show();
        }
    }
}

方案2:判断是否来自同一个Drawable资源(通用所有Drawable)

如果你的white.xml是带渐变、边框的复杂Shape,或者其他类型的Drawable,那可以比较它们的ConstantState——同一个xml资源生成的Drawable,ConstantState是共享的:

public void getColor(View view) {
    Drawable bgText1 = findViewById(R.id.text1).getBackground();
    Drawable bgText2 = findViewById(R.id.text2).getBackground();

    // 通过ConstantState判断是否来自同一个资源
    if (bgText1.getConstantState().equals(bgText2.getConstantState())) {
        // 背景来自同一个drawable资源
        Toast.makeText(this, "两个TextView用的是同一个背景资源", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "两个TextView的背景资源不同", Toast.LENGTH_SHORT).show();
    }
}

两种方案的区别

  • 方案1是直接比较颜色值:哪怕两个背景来自不同xml,但颜色相同,也会判定为一致;
  • 方案2是比较资源归属:只有当两个背景确实用的是同一个xml资源时,才会判定为一致,更贴合你当前的场景。

内容的提问来源于stack exchange,提问作者Wiji KhaN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:11:33