I have EditText with custom background drawable:
EditText code:
<EditText
android:id="@+id/etName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@{ViewModel.isAllowEdit ? @drawable/profile_et_background_active : @drawable/profile_et_background}"
android:inputType="@{ViewModel.isAllowEdit ? InputType.TYPE_CLASS_TEXT : InputType.TYPE_NULL}"
android:text="@={ViewModel.name}"
android:textColor="@color/main_dark_text_color" />
I'm using android databinding library and MVVM architecture.
If ViewModel has isAllowEdit set to true than EditText background set to @drawable/profile_et_background_active.
If isAllowEdit false EditText has background set to @drawable/profile_et_background.
Also i'm disallow edit by setting inputType to TYPE_NULL, and allow edit by setting inputType to TYPE_CLASS_TEXT.
@drawable/profile_et_background_active code:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="@color/main_elements_line_color" />
</shape>
</item>
</layer-list>
@drawable/profile_et_background code:
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
When edit is allowed and user start typing text in EditText additional underline appears under typed word (it belongs only to currently typed word, all other parts of EditText text has no underline):
I tried to remove that underline by adding color filter to EditText:
et.setColorFilter(getResources().getColor(android.R.color.transparent), PorterDuff.Mode.SRC_IN)
But it doesn't work.
How can i remove that extra underline ?
UPDATE 1
I already tried to add @android:color/transparent, and I'm getting error:
"java.lang.Integer cannot be cast to android.graphics.drawable.Drawable"
when changing "@{ViewModel.isAllowEdit ? @drawable/profile_et_background_active : @drawable/profile_et_background}"
to "@{ViewModel.isAllowEdit ? @drawable/profile_et_background_active : @android:color/transparent}"
UPDATE 2
Adding InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS does not work for me. So i guess this is not Spell Checker's problem.
The underline text styling is applied by the BaseInputConnection
of EditText
to the text currently being "composed" using the styling applied by the theme attribute android:candidatesTextStyleSpans
, which by default is set to the string <u>candidates</u>
.
The text part of the string is ignored, but the style spans are extracted from the string and applied to "composing" text which is the word the user is currently typing, a.o. to indicate that suggestions can be selected or that autocorrect is active.
You can change that styling (e.g. to use bold or italics instead of underlines), or remove the styling altogether, by setting the theme attribute to a styled or unstyled string:
<!-- remove styling from composing text-->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- ... -->
<item name="android:candidatesTextStyleSpans">candidates</item>
</style>
<!-- apply bold + italic styling to composing text-->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- ... -->
<item name="android:candidatesTextStyleSpans"><b><i>candidates</i></b></item>
</style>
Caveat: Removing all styling will cause the BaseInputConnection implementation to re-evaluate the theme attribute on every change of text, as the span information is lazy loaded and persisted only if the attribute is set to a styled string. You could alternatively set any other styling as is supported by Html:fromHtml(...)
, e.g. <span style="color:#000000">...</span>
to the default text color, which makes no difference in display.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With