技术问询:如何获取当前颜色并显示至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
相关产品推荐
相关产品推荐

