Я создаю небольшое приложение-редактор кода. Проблема в том, что изменение расширения не приводит к изменению цвета определенных слов. Я использую файл ресурсов строкового массива для определения конкретного слова.а также добавьте класс Common, чтобы получить расширение, используя диалоговое окно save as.В общем классе у меня возникла проблема с использованием ниже,
public static String currentExtention;
Ошибка исключения нулевой точки. Затем я установил для него значение, например «txt».Но теперь проблема не меняет цвет, когда я меняю расширение.Мои классы приведены ниже.
public class Common {
public static String currentExtention="txt";
public static void setCurrentExtention(String extention)
{
currentExtention=extention;
}
public static String getCurrentExtention()
{
return currentExtention;
}
}
Я изменяю тип данных, используя FileSaveDialog class.using
Common.setCurrentExtention(extention );
расширение, заданные значения получаются пользователем.это работа и передача Основная деятельность по исправлению расширения.В моем классе деятельности ниже
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_file);
txtnumberView = (TextView) findViewById(R.id.numberViewText);
edtTextView = (MultiAutoCompleteTextView) findViewById(R.id.edtTextView);
relativeLayout = (RelativeLayout) findViewById(R.id.layout_root);
helper = new TextViewUndoRedo(edtTextView);
context = NewFileActivity.this;
fileSaveDialog = new FileSaveDialog(context);
findTextDialog = new FindTextDialog(context);
autoCompleteText = new AutoCompleteText(context);
autoChangeNumberTxtView=new AutoChangeNumberTxtView(context,edtTextView,txtnumberView);
switch (Common.getCurrentExtention()) {
case "html":
dataType = getResources().getStringArray(R.array.html);
break;
case "txt":
dataType = getResources().getStringArray(R.array.txt);
break;
}
regex = new StringBuilder("\\b(");
for (String word : dataType) {
regex.append(Pattern.quote(word));
regex.append("|");
}
regex.setLength(regex.length() - 1); // delete last added "|"
regex.append(")\\b");
edtTextView.addTextChangedListener(new TextWatcher() {
ColorScheme keywords = new ColorScheme(
Pattern.compile(regex.toString()),
Color.CYAN
);
ColorScheme numbers = new ColorScheme(
Pattern.compile("(\\b(\\d*[.]?\\d+)\\b)"),
Color.BLUE
);
final ColorScheme[] schemes = {keywords, numbers};
void removeSpans(Editable e, Class<? extends CharacterStyle> type) {
CharacterStyle[] spans = e.getSpans(0, e.length(), type);
for (CharacterStyle span : spans) {
e.removeSpan(span);
}
}
class ColorScheme {
final Pattern pattern;
final int color;
ColorScheme(Pattern pattern, int color) {
this.pattern = pattern;
this.color = color;
}
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
autoChangeNumberTxtView.autoOnchange();
textInType();
}
@Override
public void afterTextChanged(Editable editable) {
removeSpans(editable, ForegroundColorSpan.class);
for (ColorScheme scheme : schemes) {
for (Matcher m = scheme.pattern.matcher(editable); m.find(); ) {
editable.setSpan(new ForegroundColorSpan(scheme.color),
m.start(),
m.end(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
});
Для дальнейшего развития я использую MultiAutoCompleteTextView вместо EditText.Я думаю, что проблема там.
switch (Common.getCurrentExtention()) {
case "html":
dataType = getResources().getStringArray(R.array.html);
break;
case "txt":
dataType = getResources().getStringArray(R.array.txt);
break;
}
regex = new StringBuilder("\\b(");
for (String word : dataType) {
regex.append(Pattern.quote(word));
regex.append("|");
}
regex.setLength(regex.length() - 1); // delete last added "|"
regex.append(")\\b");
edtTextView.addTextChangedListener(new TextWatcher() {
ColorScheme keywords = new ColorScheme(
Pattern.compile(regex.toString()),
Color.CYAN
);
ColorScheme numbers = new ColorScheme(
Pattern.compile("(\\b(\\d*[.]?\\d+)\\b)"),
Color.BLUE
);
final ColorScheme[] schemes = {keywords, numbers};
void removeSpans(Editable e, Class<? extends CharacterStyle> type) {
CharacterStyle[] spans = e.getSpans(0, e.length(), type);
for (CharacterStyle span : spans) {
e.removeSpan(span);
}
}
class ColorScheme {
final Pattern pattern;
final int color;
ColorScheme(Pattern pattern, int color) {
this.pattern = pattern;
this.color = color;
}
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
removeSpans(editable, ForegroundColorSpan.class);
for (ColorScheme scheme : schemes) {
for (Matcher m = scheme.pattern.matcher(editable); m.find(); ) {
editable.setSpan(new ForegroundColorSpan(scheme.color),
m.start(),
m.end(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
Это не сбой, а отображение logcat ниже.когда я изменяю расширение файла.
E/ViewRootImpl: sendUserActionEvent() mView == null
E/ViewRootImpl: sendUserActionEvent() mView == null
Если кто-то может объяснить мне, в чем проблема или как правильно сделать это. Это будет очень полезно для меня.