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

技术问询:如何获取当前颜色并显示至EditText及自定义视图字符颜色设置

解决方案

首先,我们可以先重构你现有的颜色设置代码,让它更简洁易维护,同时能轻松关联颜色值和对应的名称,之后再实现把颜色名称显示到EditText的逻辑。

1. 重构颜色管理逻辑

你当前的switch语句可以用数组或自定义类来替代,这样既能简化代码,也能方便我们获取当前颜色的名称:

方式一:并行数组(简单直接)

在你的自定义视图类中添加这些成员变量:

// 存储颜色值的数组
private int[] colorValues = {
    Color.GREEN,
    Color.BLUE,
    Color.RED,
    Color.YELLOW,
    Color.MAGENTA,
    Color.WHITE
};
// 对应颜色名称的数组(和上面的数组索引一一对应)
private String[] colorNames = {
    "绿色",
    "蓝色",
    "红色",
    "黄色",
    "洋红色",
    "白色"
};
private int curColorIndex = 0; // 当前选中的颜色索引

然后修改你的setColor()方法:

public void setColor() {
    curColorIndex++;
    // 取模运算让索引循环回到数组范围内
    curColorIndex = curColorIndex % colorValues.length;
    // 设置画笔颜色
    paintTxt.setColor(colorValues[curColorIndex]);
    
    // 这里直接就能拿到当前颜色的名称
    String currentColorName = colorNames[curColorIndex];
    // 后续把这个名称设置到EditText即可
}

方式二:自定义类(更面向对象)

如果想让代码更规范,可以创建一个简单的ColorItem类来封装颜色信息:

public class ColorItem {
    private int colorValue;
    private String colorName;

    public ColorItem(int colorValue, String colorName) {
        this.colorValue = colorValue;
        this.colorName = colorName;
    }

    // Getter方法
    public int getColorValue() { return colorValue; }
    public String getColorName() { return colorName; }
}

接着在自定义视图中定义颜色列表:

private List<ColorItem> colorList = Arrays.asList(
    new ColorItem(Color.GREEN, "绿色"),
    new ColorItem(Color.BLUE, "蓝色"),
    new ColorItem(Color.RED, "红色"),
    new ColorItem(Color.YELLOW, "黄色"),
    new ColorItem(Color.MAGENTA, "洋红色"),
    new ColorItem(Color.WHITE, "白色")
);
private int curColorIndex = 0;

修改setColor()方法:

public void setColor() {
    curColorIndex++;
    curColorIndex = curColorIndex % colorList.size();
    ColorItem currentColor = colorList.get(curColorIndex);
    paintTxt.setColor(currentColor.getColorValue());
    String currentColorName = currentColor.getColorName();
}

2. 将颜色名称显示到EditText

根据你的布局结构,分两种场景实现:

场景一:EditText和自定义视图在同一页面

如果两者在同一个Activity/Fragment中,直接在setColor()方法里拿到EditText实例设置文本即可:

// 假设你的EditText的id是et_color_name
EditText colorNameEt = findViewById(R.id.et_color_name);
colorNameEt.setText(currentColorName);

场景二:自定义视图是独立组件(用回调传递)

如果自定义视图是封装好的独立组件,最好用回调接口来传递颜色名称,避免耦合:

首先在自定义视图中定义回调接口:

public interface OnColorChangedListener {
    void onColorChanged(String colorName);
}

// 保存回调实例的成员变量
private OnColorChangedListener colorChangedListener;

// 给外部设置回调的方法
public void setOnColorChangedListener(OnColorChangedListener listener) {
    this.colorChangedListener = listener;
}

然后在setColor()方法中触发回调:

public void setColor() {
    // ...前面的颜色设置逻辑...
    String currentColorName = colorNames[curColorIndex];
    // 如果回调不为空,通知外部更新EditText
    if (colorChangedListener != null) {
        colorChangedListener.onColorChanged(currentColorName);
    }
}

最后在你的Activity/Fragment中设置回调:

// 假设自定义视图id是custom_view
CustomView customView = findViewById(R.id.custom_view);
EditText colorNameEt = findViewById(R.id.et_color_name);

customView.setOnColorChangedListener(new CustomView.OnColorChangedListener() {
    @Override
    public void onColorChanged(String colorName) {
        colorNameEt.setText(colorName);
    }
});

3. 随时获取当前颜色的方法

如果你需要在任意时刻获取当前颜色的信息,可以在自定义视图中添加Getter方法:

// 获取当前颜色值
public int getCurrentColorValue() {
    return colorValues[curColorIndex];
}

// 获取当前颜色名称
public String getCurrentColorName() {
    return colorNames[curColorIndex];
}

这样在需要的时候,直接调用这两个方法就能拿到对应信息,再设置到EditText里即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:21:13