【问题标题】:HTC Sense/EVO not respecting EditText color when writing编写时 HTC Sense/EVO 不尊重 EditText 颜色
【发布时间】:2012-02-28 19:11:15
【问题描述】:

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

我基本上有一个带有透明背景 (#00000000) 和白色文本的 EditText,设置为允许输入电子邮件地址(inputType 为 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>

有什么建议吗?我尝试了几件事,包括更改各种颜色(以防它试图“猜测”选择突出显示的文本颜色)但没有任何效果;无法设置正在写入的文本的颜色...它总是黑色的。

【问题讨论】:

  • 我也有同样的问题。你找到比 TextWatcher(这里的答案之一)方法更好的方法了吗?
  • 没有。最后我只使用了常规的 inputType。 :(

标签: android android-edittext sense


【解决方案1】:

我想在这里添加一个小评论 - 在某些情况下使用 Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 可能会导致:

IndexOutOfBoundsException: setSpan(...

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

当我在EditText 视图中编辑文本时,我收到了一个异常,我接到了来电。同样在我在中间编辑文本然后尝试在末尾添加一个字符 的情况下(仅在 HTC Sense 版本

【讨论】:

    【解决方案2】:

    我在一些 HTC 上也遇到过同样的事情。 我实现了一个 TextWatcher,以在您输入 EditText 时将文本颜色强制为 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));
    

    【讨论】:

    • 最接近解决方案。没有亲自尝试过,但看起来足够好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多