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).