2016-07-21 20 views
2

Ich habe eine TextView mit einer zufälligen Hintergrundfarbe (könnte jede Farbe wirklich sein). Ich habe auch einen Text in dieser Textansicht, der lesbar sein muss. Ich nehme an, die beste Lösung ist es, den Text in Weiß zu markieren und die Textfarbe auf Schwarz zu setzen.Text in einer Textansicht hervorheben

Meine Frage ist: Ist es möglich, den Text in einer Texview aus dem XML hervorzuheben?

Ich habe folgend in meinem Layout:

<TextView 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:id="@+id/colorButton4" 
     android:layout_gravity="right|bottom" 
     android:background="@drawable/layout_border" 
     android:layout_marginRight="30dp" 
     android:layout_marginBottom ="30dp" 
     android:clickable="true" 
     android:onClick="onClick" 
     android:gravity="center" 
     android:textColorHighlight="@color/bgWhite" 
     android:textColor="@color/Black" 
     android:text="5431354" /> 

Aber es deosn't den Text markieren.

+0

Was meinst du mit Highlight? – finki

+1

Lassen Sie den Text unabhängig von der TextView-Hintergrundfarbe sichtbar. So: http://i1.wp.com/texblog.org/Wordpress/wp-content/uploads/2015/05/latex-highlight-text.png – Slamit

+0

werfen Sie einen Blick auf meine Antwort https: // stackoverflow. com/a/47142724/2685454 – Sumit

Antwort

0

Wenn Sie die Dokumentation für Textview überprüft haben, würden Sie heraus hätte festgestellt, dass android:textColorHighlight nicht tut, was Sie wollen: https://developer.android.com/reference/android/widget/TextView.html#attr_android:textColorHighlight

Es wird nur benutzt, wenn Auswählen von Text, z.B. in einem EditText. Sie müssen den Hintergrund der TextView auf "highlight" setzen.

+0

Ich verstehe das in der Tat. Meine Frage ist, ist es auf andere Weise möglich? Ich nehme an, nein, aber als Anfänger frage ich, ob es einen Trick gibt, den ich nicht kenne. – Slamit

+0

Ich verstehe nicht, warum Sie in einer Textansicht einen Hintergrund setzen, wenn Sie ihn sowieso mit Schwarz "hervorheben" wollen? ;) – finki

+0

Ich möchte einen TextView mit zufälliger Hintergrundfarbe haben und der Text sagt "Die Hintergrundfarbe ist " Jetzt ist die Hintergrundfarbe ist mit ich kann meinen Text lesen, wenn es Marine ist es schwer zu lesen, wenn es wieder da ist Ich kann es nicht lesen. Ich hoffe es erklärt es richtig – Slamit

3

Wahrscheinlich möchten Sie hierfür einen SpannableString10 verwenden, der es ermöglicht, einzelne Teile eines Strings in einem TextView anders darzustellen.

Wie so:

SpannableString str = new SpannableString("Highlighted. Not highlighted."); 
    str.setSpan(new BackgroundColorSpan(Color.YELLOW), 0, 11, 0); 
    textView.setText(str); 
+0

Sie sagen mir also, es ist nicht möglich, ohne irgendwo in meinem Java-Code zu haben? – Slamit

+0

Es ist möglich, Text in der Datei strings.xml mithilfe bestimmter HTML-Tags zu formatieren. Versuchen Sie eine dieser Antworten: http://stackoverflow.com/questions/17559019/text-view-with-different-colored-texts-in-xml-code, aber verwenden Sie Hintergrundfarbe anstelle der Schriftfarbe – Egg

+0

Danke für den Link. Es gibt einige interessante Punkte! Leider funktioniert keine der XML-Lösungen. Ich denke, ich werde dafür einen Java-Code verwenden müssen. – Slamit

1

Um alle Vorkommen von bestimmten Text zu markieren diese Methode verwenden:

private void highlightString(String input) { 
//Get the text from text view and create a spannable string 
SpannableString spannableString = new SpannableString(mTextView.getText()); 
//Get the previous spans and remove them 
BackgroundColorSpan[] backgroundSpans = spannableString.getSpans(0, spannableString.length(), BackgroundColorSpan.class); 

for (BackgroundColorSpan span: backgroundSpans) { 
    spannableString.removeSpan(span); 
} 

//Search for all occurrences of the keyword in the string 
int indexOfKeyword = spannableString.toString().indexOf(input); 

while (indexOfKeyword > 0) { 
    //Create a background color span on the keyword 
    spannableString.setSpan(new BackgroundColorSpan(Color.YELLOW), indexOfKeyword, indexOfKeyword + input.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    //Get the next index of the keyword 
    indexOfKeyword = spannableString.toString().indexOf(input, indexOfKeyword + input.length()); 
} 

//Set the final text on TextView 
mTextView.setText(spannableString);} 

Hinweis: mTextView ist ein Textview-Objekt, in dem Sie Ihren Text

markieren möchten
+0

'while (indexOfKeyword! = -1) {...}' um auch das erste Wort in einem Text hervorzuheben. –

Verwandte Themen