2010-01-22 3 views
19

Ist es möglich, Text in einem TextView oder WebView hervorzuheben?10 Text in TextView oder WebView markieren

Ich sehe es möglich ist, in einem EditText

Highligh text in a EditText

Ich mag würde das gleiche in TextView oder WebView zu tun.
Das ist möglich?

+0

Überprüfen Sie dies auch http://StackOverflow.com/Questions/6309093/how-to-allow-the-user-to-select-a-text-range- in-a-textansicht-ähnlich-zu-bearbeiten-text – hassanadnan

+0

möglich duplikat von [Ist es möglich, mehrere Stile in einem TextView zu haben?] (http://stackoverflow.com/questions/1529068/is-it-possible-to-have -multiple-styles-inside-a-textview) – blahdiblah

+0

Wie geht das in einem Webview? – AnupamChugh

Antwort

56

Aktivieren Sie den spannbaren Speicher von TextView! Standardmäßig ist der spannbare Speicher in EditText true.

so

TextView myTV = (TextView)findViewById(R.id.textView1); 
String textString = "StackOverFlow Rocks!!!"; 
Spannable spanText = Spannable.Factory.getInstance().newSpannable(textString); 
spanText.setSpan(new BackgroundColorSpan(0xFFFFFF00), 14, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
myTV.setText(spanText); 
+3

Danke, es funktioniert gut. Aber ich denke, spannbare Text erstellen von: Spannable spanText = Spannable.Factory.getInstance(). NewSpannable (TextString); ist besser als textView.setText() und textView.getText(). – VAdaihiep

+0

Gibt es eine Möglichkeit, eine berechnete Textansicht zu erstellen und dann mehrere Spannen festzulegen? –

+0

+ l für 'StackOverFlow Rocks !!!' –

0

Eigentlich müssen Sie sich nicht selbst um diese Funktion entwickeln. Sie müssen nur EditText anstelle von TextView verwenden, während Sie den android: bearbeitbaren EditText auf false setzen.

Meine Antwort ist, hoffen, dass es Ihnen helfen kann:

https://stackoverflow.com/a/11026292/966405

1

Neben können Sie diese Lösung für WebView verwenden. Rufen Sie findAllAsync

webview.findAllAsync(((EditText) findViewById(R.id.edit)).getText().toString()); 

als Add FindListener zu WebView

webview.setFindListener(new FindListener() { 

     @Override 
     public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) { 
      Toast.makeText(getApplicationContext(), "Matches: " + numberOfMatches, Toast.LENGTH_LONG).show(); 
     } 
    }); 

Iterate in Folge mit webview.findNext(false); wo false/true, um die Richtung zeigt.

Aber diese Lösung wurde in API level 16 hinzugefügt !!! Anstelle von Sie können JavaScript für higlihting einrichten - http://www.nsftools.com/misc/SearchAndHighlight.htm