HTC Sense/EVO не учитывает цвет EditText при записи

У меня проблема на конкретном устройстве, HTC EVO на Android 2.3.x. Я думаю, что это может быть специфическая проблема HTC Sense.

У меня в основном есть EditText с прозрачным фоном (#00000000) и белым текстом, разрешить ввод адреса электронной почты (inputType is textEmailAddress).

Проблема: однако, когда пользователь пишет адрес электронной почты, текст черный, поэтому его невозможно прочитать.

Когда пользователь меняет фокус на другой элемент представления, текст корректно окрашивается в белый цвет.

Если пользователь снова фокусируется на EditTextранее введенный текст остается белым, но любой новый текст черный.

Если я изменю inputType с textEmailAddressничего не сказать, или textFilterтекст отображается правильно... он по-прежнему черный, но вокруг него есть выделение (из-за "подсказок", представленных клавиатурой - не отображается на textEmailAddress типа.) и, следовательно, это читабельно. Недостатком является отсутствие метода ввода электронной почты (с "@" на клавиатуре).

Я хотел бы, чтобы мой текст был всегда читабельным (то есть белым при написании) и имел правильную (электронную почту) запись. Предложения или нет, это не имеет значения - это просто должно быть читаемым.

EditText используется достаточно просто:

<EditText
    android:id="@+id/fieldEmail"
    android:layout_width="match_parent"
    android:layout_height="42dp"
    android:layout_marginTop="10dp"
    android:hint="Enter your email"
    android:textSize="16dp"
    android:textColor="#ffffffff"
    android:textColorHint="#ffffffff"
    android:textColorLink="#ffffffff"
    android:background="#00000000"
    android:inputType="textEmailAddress">
</EditText>

Какие-либо предложения? Я попробовал несколько вещей, включая изменение всех видов цветов (в случае, если он пытается "угадать" цвет текста для выделения выделения), и ничего не работает; нет способа установить цвет текста, который пишется... он всегда черный.

2 ответа

Решение

Я испытал то же самое на некоторых HTC. Я реализовал TextWatcher, чтобы заставить цвет текста как Spannable при вводе в EditText

    private class HTCEditTextFix implements TextWatcher {
        private EditText mEditText;
        public HTCEditTextFix(EditText editText) {
            mEditText = editText;
        }
        public void afterTextChanged(Editable s) {}
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mEditText.getText().setSpan(new ForegroundColorSpan(Color.WHITE), start, start, Spannable.SPAN_COMPOSING);
        }
    }

Затем примените его к вашему EditText

myEditText1.addTextChangedListener(new HTCEditTextFix(myEditText1));

Я хотел бы добавить небольшой комментарий здесь - используя Spannable.SPAN_EXCLUSIVE_EXCLUSIVE в некоторых случаях может вызвать:

IndexOutOfBoundsException: setSpan(...

чтобы избежать этого просто нужно выбрать другой флаг span, у меня работает Spannable.SPAN_COMPOSING,

Я получал упомянутое исключение, когда я редактировал текст в EditText просмотр и я получил входящий звонок. Также в ситуации, когда я редактировал текст посередине, а затем пытался добавить символ в конце (только на устройствах с HTC Sense версии < 2.1).

Другие вопросы по тегам