Android Studio中如何设置ArrayList元素及前缀文本的显示颜色
在Android中实现TextView不同片段显示不同颜色,需要使用SpannableStringBuilder配合ForegroundColorSpan完成,直接替换原有文本拼接、设置逻辑即可,修改后的完整代码如下:
import android.graphics.Color; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; // ... 原有类和其他逻辑保持不变 { List<Integer> primeNumbers = new ArrayList<>(); String firstNumber = edtFNum.getText().toString(); String secondNumber = edt2Num.getText().toString(); for (int i = Integer.parseInt(firstNumber); i <= Integer.parseInt(secondNumber); i++) { boolean isPrime = true; for (int j = 2; j <= i / 2; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) { primeNumbers.add(i); } } txtResult.setMovementMethod(new ScrollingMovementMethod()); // ------------ 以下为新增的样式设置逻辑 ------------ SpannableStringBuilder ssb = new SpannableStringBuilder(); // 1. 处理开头红色文字 String redText = "Prime numbers between"; ssb.append(redText); ssb.setSpan(new ForegroundColorSpan(Color.RED), 0, redText.length(), SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE); // 2. 拼接范围和提示文字(默认样式,可按需修改) ssb.append(" " + firstNumber + " and " + secondNumber + " are: "); // 3. 处理素数交替颜色 for (int i = 0; i < primeNumbers.size(); i++) { String numStr = String.valueOf(primeNumbers.get(i)); int start = ssb.length(); ssb.append(numStr); // 从0开始计数,第一个元素(索引0)蓝色,第二个(索引1)绿色,循环交替 if (i % 2 == 0) { ssb.setSpan(new ForegroundColorSpan(Color.BLUE), start, ssb.length(), SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE); } else { ssb.setSpan(new ForegroundColorSpan(Color.GREEN), start, ssb.length(), SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE); } // 非末尾元素加逗号分隔 if (i != primeNumbers.size() - 1) { ssb.append(", "); } } // 4. 设置最终文本 txtResult.setText(ssb); }
补充说明
如果你需要使用自定义色值代替系统自带颜色,可以把Color.RED/Color.BLUE/Color.GREEN替换为ContextCompat.getColor(context, R.color.你的自定义颜色名)即可。
内容的提问来源于stack exchange,提问作者user16731355
相关产品推荐
相关产品推荐

