大写/小写字母和textView中的数字的颜色不同

时间:2016-02-16 12:29:38

标签: android android-layout android-fragments android-styles

我的应用程序中有一个textView,我用一次性密码填充大小写字母和数字。我现在要求所有三种类型的字符都有不同的颜色以增加可读性。在谷歌看看,但可能会得到很多。任何人都可以指出我正确的方法。将从那里拿起它。 在此先感谢!!

3 个答案:

答案 0 :(得分:3)

试试这个:

<强> 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

答案 1 :(得分:2)

试试这个答案,

 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

注意:未测试输出..

答案 2 :(得分:0)

您已提及其密码字段,因此不应显示我们输入的任何文字。但是如果你真的打算为不同的表达方式设置不同的风格/颜色,那么你可以尝试

  1. 首先找出根据您的要求分组的字符(数字,大写和小写)

  2. 使用Html.fromHtml方法设置每个组的颜色。

  3. String string =“大写字母。小写1数字。“;

    您也可以尝试Spannable字符串。