android editext 自定义字符颜色,如何在Android中的edittext中为每个字符设置不同的颜色?...

是的,它是可能的,但我不知道,如果是在性能方面过于昂贵。 您可以使用TextWatcher为您最后插入的char字符着色,该字符基于您的字符颜色映射。

public class MainActivity extends AppCompatActivity {

private SpannableStringBuilder mSpannableStringBuilder;

private EditText mEditText;

private static final Map COLORS_MAP = new HashMap<>();

@Override protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// here you can populate your map with colors

COLORS_MAP.put("a", Color.RED);

COLORS_MAP.put("b", Color.GREEN);

COLORS_MAP.put("c", Color.BLUE);

COLORS_MAP.put("d", Color.MAGENTA);

mSpannableStringBuilder = new SpannableStringBuilder();

mEditText = (EditText) findViewById(R.id.editText);

mEditText.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override

public void afterTextChanged(Editable s) {

if (s.length() > 0) {

// unregister and register the listener to avoid infinite loop

mEditText.removeTextChangedListener(this);

int start = s.length() - 1;

String lastChar = s.toString().substring(start);

SpannableString lastSpannableChar = new SpannableString(lastChar);

// pick the color based on the last char

int color = pickColorByChar(lastChar);

// Span to set char color

ForegroundColorSpan fcs = new ForegroundColorSpan(color);

// Set the text color for the last character

lastSpannableChar.setSpan(fcs, 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

// append the last char to the string builder so you can keep the previous span

mSpannableStringBuilder.append(lastSpannableChar);

mEditText.setText(mSpannableStringBuilder);

mEditText.setSelection(mEditText.getText().length()); //this is to move the cursor position

mEditText.addTextChangedListener(this);

}

}

});

}

public int pickColorByChar(String aChar){

return COLORS_MAP.get(aChar);

}

}

这是结果

mXbPd.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值