textView 中 upper/lower 大小写字母和数字的不同颜色
Different color for upper/lower case alphabets and digits in textView
我的应用程序中有一个 textView,我用 upper/lower 大小写字母和数字的一次性密码填充它。我现在需要为所有三种类型的字符使用不同的颜色以提高可读性。在 google 中环顾四周,但可以得到很多。任何人都可以将我指向右边 approach.Will 从那里拿起它。
提前致谢!!
试试这个答案,
TextView TV = (TextView)findViewById(R.id.tv_onetime_password);
String oneTimePass="43434Qe";
for(int i = 0; i < oneTimePass.length(); i++) {
String myChar=oneTimePass.charAt(i);
Spannable word = new SpannableString(myChar);
//for digits
if (Character.isLetter(oneTimePass.charAt(i))){
word.setSpan(new ForegroundColorSpan(Color.WHITE), i,(i+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(word);
}
//for letters
else{
boolean hasUppercase = !myChar.equals(myChar.toLowerCase());
if(hasUppercase){
word.setSpan(new ForegroundColorSpan(Color.BLUE), i,(i+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(word);
}
else {
word.setSpan(new ForegroundColorSpan(Color.RED), i,(i+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(word);
}
}
}
更多参考,
Single TextView with multiple colored text
注意:未测试输出..
您提到它是一个密码字段,因此它不应显示我们输入的任何文本。但是如果你真的想为不同的commination设置不同的style/color那么你可以尝试
首先根据您的要求找出分组的字符(数字,大写和小写)
使用 Html.fromHtml 方法设置每个组的颜色。
String string = "大写。小写 1 数字。";
您也可以试试 Spannable 字符串。
试试这个:
MainActivity.java
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.myColoredString);
String x = tv.getText().toString();
SpannableStringBuilder builder = new SpannableStringBuilder();
for(int i = 0; i< x.length();i++){
//UpperCase : RED
if(x.charAt(i) >= 65 && x.charAt(i) <= 90) {
String s = x.charAt(i) + "";
SpannableString spannableString = new SpannableString(s);
spannableString.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
builder.append(spannableString);
}
//LowerCase: GREEN
if(x.charAt(i) >= 97 && x.charAt(i) <= 122) {
String s = x.charAt(i) + "";
SpannableString spannableString = new SpannableString(s);
spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), 0, s.length(), 0);
builder.append(spannableString);
}
//Digits: BLUE
if(x.charAt(i) >= 48 && x.charAt(i) <= 57) {
String s = x.charAt(i) + "";
SpannableString spannableString = new SpannableString(s);
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 0, s.length(), 0);
builder.append(spannableString);
}
}
tv.setText(builder, TextView.BufferType.SPANNABLE);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/myColoredString"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HeLlo98"
/>
</RelativeLayout>
Refer this link
我的应用程序中有一个 textView,我用 upper/lower 大小写字母和数字的一次性密码填充它。我现在需要为所有三种类型的字符使用不同的颜色以提高可读性。在 google 中环顾四周,但可以得到很多。任何人都可以将我指向右边 approach.Will 从那里拿起它。 提前致谢!!
试试这个答案,
TextView TV = (TextView)findViewById(R.id.tv_onetime_password);
String oneTimePass="43434Qe";
for(int i = 0; i < oneTimePass.length(); i++) {
String myChar=oneTimePass.charAt(i);
Spannable word = new SpannableString(myChar);
//for digits
if (Character.isLetter(oneTimePass.charAt(i))){
word.setSpan(new ForegroundColorSpan(Color.WHITE), i,(i+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(word);
}
//for letters
else{
boolean hasUppercase = !myChar.equals(myChar.toLowerCase());
if(hasUppercase){
word.setSpan(new ForegroundColorSpan(Color.BLUE), i,(i+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(word);
}
else {
word.setSpan(new ForegroundColorSpan(Color.RED), i,(i+1), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.append(word);
}
}
}
更多参考, Single TextView with multiple colored text
注意:未测试输出..
您提到它是一个密码字段,因此它不应显示我们输入的任何文本。但是如果你真的想为不同的commination设置不同的style/color那么你可以尝试
首先根据您的要求找出分组的字符(数字,大写和小写)
使用 Html.fromHtml 方法设置每个组的颜色。
String string = "大写。小写 1 数字。";
您也可以试试 Spannable 字符串。
试试这个:
MainActivity.java
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.myColoredString);
String x = tv.getText().toString();
SpannableStringBuilder builder = new SpannableStringBuilder();
for(int i = 0; i< x.length();i++){
//UpperCase : RED
if(x.charAt(i) >= 65 && x.charAt(i) <= 90) {
String s = x.charAt(i) + "";
SpannableString spannableString = new SpannableString(s);
spannableString.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
builder.append(spannableString);
}
//LowerCase: GREEN
if(x.charAt(i) >= 97 && x.charAt(i) <= 122) {
String s = x.charAt(i) + "";
SpannableString spannableString = new SpannableString(s);
spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), 0, s.length(), 0);
builder.append(spannableString);
}
//Digits: BLUE
if(x.charAt(i) >= 48 && x.charAt(i) <= 57) {
String s = x.charAt(i) + "";
SpannableString spannableString = new SpannableString(s);
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 0, s.length(), 0);
builder.append(spannableString);
}
}
tv.setText(builder, TextView.BufferType.SPANNABLE);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/myColoredString"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HeLlo98"
/>
</RelativeLayout>
Refer this link