2010-10-27 24 views
48
text = text + CepVizyon.getPhoneCode() + "\n\n" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText(); 
    activationText.setText(text); 
myTextView.setText(text); 

Tôi muốn thay đổi màu cho chuỗi của CepVizyon.getPhoneCode() ... làm cách nào tôi có thể thực hiện việc này ??Tôi làm cách nào để thay đổi phần màu của TextView?

+0

Xem này: http://stackoverflow.com/questions/ 4897349/android-coloring-part-of-a-string-using-textview-settext –

+0

Bản sao có thể có của [Đặt màu của khoảng TextView trong Android] (http://stackoverflow.com/questions/3282940/set-color-of -textview-span-in-android) – Suragch

+0

@Suragch Làm thế nào để bạn biết rằng bài viết cũ hơn tôi? :) – atasoyh

Trả lời

104

Spannable là linh hoạt hơn:

String text2 = text + CepVizyon.getPhoneCode() + "\n\n" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText(); 

Spannable spannable = new SpannableString(text2); 

spannable.setSpan(new ForegroundColorSpan(Color.WHITE), text.length(), (text + CepVizyon.getPhoneCode()).length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

myTextView.setText(spannable, TextView.BufferType.SPANNABLE); 
+1

Cảm ơn bạn đã trả lời câu trả lời này! Điều này giống như NSAttributedString trong iOS :) Để linh hoạt hơn, hãy thay thế text.lenght bằng text2.indexOf (CepVizyon.getPhoneCode()) cho phép bạn không biết phần đầu tiên của Chuỗi. – iGranDav

+1

Bạn nên đặt '()' sau 'text.length' là' length' là một phương thức không phải là một trường. Tự mình làm nhưng bản chỉnh sửa phải có ít nhất 6 ký tự :) – MSX

+0

Câu trả lời hay nhất cho đến nay. –

-3

Một cách là tách myTextView thành một số riêng biệt TextViews, một trong số đó chỉ dành cho mã điện thoại. Sau đó, kiểm soát màu sắc của TextView cụ thể này là khá đơn giản.

+3

Không, đau ở mông. Sử dụng một spannable là đúng cách. –

54
myTextView.setText(Html.fromHtml(text + "<font color=white>" + CepVizyon.getPhoneCode() + "</font><br><br>" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText())); 
12

Liên quan đến câu trả lời của Maneesh, điều này sẽ hiệu quả nhưng bạn cần thêm và thoát khỏi dấu ngoặc kép cho thuộc tính màu.

myTextView.setText(Html.fromHtml(text + "<font color=\"#FFFFFF\">" + CepVizyon.getPhoneCode() + "</font><br><br>" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText())); 
5

Nó là tốt cho tôi!

  Spannable spannable = new SpannableString("ABC In-Network DEF"); 
      String str = spannable.toString(); 
      iStart = str.indexOf("In-Network"); 
      iEnd = iStart + 10;/*10 characters = in-network. */ 

      SpannableString ssText = new SpannableString(spannable); 
      ClickableSpan clickableSpan = new ClickableSpan() { 
       @Override 
       public void onClick(View widget) { 
        //your code at here. 
       } 

       @Override 
       public void updateDrawState(TextPaint ds) { 
        super.updateDrawState(ds); 
        ds.setUnderlineText(true); 
        ds.setColor(getResources().getColor(R.color.green)); 
       } 
      }; 
      ssText.setSpan(clickableSpan, iStart, iEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      mTextView.setText(ssText); 
      mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 
      mTextView.setHighlightColor(Color.TRANSPARENT); 
      mTextView.setEnabled(true); 
7

Nếu bạn có văn bản tĩnh mà cần màu sắc, bạn có thể thêm nó mà không có bất kỳ mã thông qua chuỗi file:

<string name="already_have_an_account">Already have an account? <font color='#01C6DB'>Login</font></string> 

sau đó

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="64dp" 
    android:text="@string/already_have_an_account"/> 

kết quả

enter image description here

không chắc chắn phiên bản api này hoạt động trên, nhưng doesnt làm việc cho api 19 mà ive thử nghiệm cho đến nay, vì vậy có lẽ chỉ một số các phiên bản api gần đây nhất hỗ trợ này

Các vấn đề liên quan