HTC Sense / EVO在写入时不尊重EditText颜色

时间:2012-02-28 19:11:15

标签: android android-edittext sense

我在特定设备上遇到问题,Android 2.3.x上的HTC EVO。我认为这可能是特定于HTC Sense的问题。

我基本上有EditText透明背景(#00000000)和白色文字,设置为允许输入电子邮件地址(inputType为textEmailAddress)。

问题:当用户正在写电子邮件地址时,文字是黑色的,因此无法阅读。

当用户将焦点更改为另一个视图元素时,文本会正确地着色回白色。

如果用户重点关注EditText,之前输入的文字仍然是白色,但任何新文字都是黑色。

如果我从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 个答案:

答案 0 :(得分:4)

我想在此处添加一条小评论 - 在某些情况下使用Spannable.SPAN_EXCLUSIVE_EXCLUSIVE会导致:

  

IndexOutOfBoundsException: setSpan(...

为了避免这种情况,我们必须选择不同的跨度标志,对我而言Spannable.SPAN_COMPOSING

当我在EditText视图中编辑文本并收到来电时,我被提到异常。此外,当我在中间编辑文本然后我尝试在末尾添加一个字符时(仅在具有HTC Sense版本&lt; 2.1的设备上)。

答案 1 :(得分:3)

我在一些HTC上经历过同样的事情。 我在TextText

中键入时实现了TextWatcher强制文本颜色为Spannable
    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));