當用戶輸入EditText時,我想讓某些關鍵字改變顏色。 當應用程序發現用戶輸入它並使用Html.fromHtml時,我可以在關鍵字周圍放置HTML標籤,但用戶將自己輸入真實的HTML標籤,這會弄亂它。所以我想我應該使用Spannable?用戶正在輸入時更改文字顏色?
我該如何掃描這些關鍵字的EditText?含義 - 什麼是最有效的方式?我想也許是所有關鍵字的數組 - 然後循環,看看是否找到任何匹配。任何想法如何解決這個問題?
當用戶輸入EditText時,我想讓某些關鍵字改變顏色。 當應用程序發現用戶輸入它並使用Html.fromHtml時,我可以在關鍵字周圍放置HTML標籤,但用戶將自己輸入真實的HTML標籤,這會弄亂它。所以我想我應該使用Spannable?用戶正在輸入時更改文字顏色?
我該如何掃描這些關鍵字的EditText?含義 - 什麼是最有效的方式?我想也許是所有關鍵字的數組 - 然後循環,看看是否找到任何匹配。任何想法如何解決這個問題?
嗨在EditText上使用TextWatcher來查看用戶正在鍵入並使用Linkify檢查模式。 https://developer.android.com/reference/android/text/util/Linkify.html
EditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
}
使用onTextChanged監聽器檢查什麼用戶輸入。
模式匹配的示例.. int flags = Pattern.CASE_INSENSITIVE; Pattern p = Pattern.compile(「\ [0-9] * \」,flags); Linkify.addLinks(myTextView, 「content://com.foo」);
在onTextChanged監聽器創建模式匹配和匹配的圖案與文字
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.util.Log;
import android.widget.EditText;
public class ColorEditText extends Activity {
private Pattern helloPattern = Pattern.compile("Hello");
private Pattern simplePattern = Pattern.compile("Simple");
private SpannableStringBuilder spannable;
private EditText edit;
private TextWatcher colorChangeText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color_edit_text);
edit =(EditText) findViewById(R.id.edit);
colorChangeText = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
edit.removeTextChangedListener(colorChangeText);
Log.d("Changes",edit.getText().toString());
spannable = new SpannableStringBuilder(edit.getText().toString());
Matcher o = helloPattern.matcher(spannable);
while (o.find()) {
spannable.setSpan(new StyleSpan(Typeface.BOLD), o.start(), o.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ForegroundColorSpan(Color.rgb(103, 58, 183)), o.start(), o.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
Matcher n = simplePattern.matcher(spannable);
while (n.find()) {
spannable.setSpan(new StyleSpan(Typeface.BOLD), n.start(), n.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ForegroundColorSpan(Color.rgb(0, 105, 92)), n.start(), n.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
edit.setText(spannable);
edit.setSelection(spannable.length());
edit.addTextChangedListener(colorChangeText);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
};
edit.addTextChangedListener(colorChangeText);
}
}
是啊,我看着linkify而且幾乎正是我需要的,除了我不想讓可點擊的事實鏈接。 – bwoogie
使用來自java的正則表達式。 – om252345