我有自定义背景drawable的EditText:
EditText代码:
System.nanoTime
我正在使用android数据绑定库和MVVM架构。
如果ViewModel将isAllowEdit设置为true,则将EditText背景设置为@ drawable / profile_et_background_active。
如果isAllowEdit为false,则EditText的背景设置为@ drawable / profile_et_background。
此外,我通过将inputType设置为TYPE_NULL来禁止编辑,并通过将inputType设置为TYPE_CLASS_TEXT来允许编辑。
@ drawable / profile_et_background_active 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" />
@ drawable / profile_et_background代码:
<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>
当允许编辑并且用户开始在EditText中键入文本时,在键入的单词下会出现另外的下划线(它只属于当前键入的单词,EditText文本的所有其他部分都没有下划线):
我尝试通过向EditText添加颜色过滤器来删除该下划线:
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
但它不起作用。
如何删除额外的下划线?
更新1
我已经尝试添加@android:color / transparent,我收到错误:
“java.lang.Integer无法强制转换为android.graphics.drawable.Drawable”
更改“@ {ViewModel.isAllowEdit?@ drawable / profile_et_background_active:@ drawable / profile_et_background}”
to“@ {ViewModel.isAllowEdit?@ drawable / profile_et_background_active:@android:color / transparent}”
更新2
添加InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS对我不起作用。所以我想这不是拼写检查器的问题。
答案 0 :(得分:3)
下划线文本样式由BaseInputConnection
的{{1}}应用到主题属性EditText
所应用的样式,该文本当前正在“组成”中,默认情况下设置为字符串android:candidatesTextStyleSpans
。
字符串的文本部分被忽略,但是样式跨度是从字符串中提取的,并应用于“撰写”文本,即用户当前正在键入的单词。表示可以选择建议或自动更正处于活动状态。
您可以通过将theme属性设置为带样式或无样式的字符串来更改样式(例如,使用粗体或斜体代替下划线),或完全删除样式:
<u>candidates</u>
注意事项:删除所有样式将使BaseInputConnection实现在每次文本更改时重新评估主题属性,因为跨度信息是延迟加载的,并且仅当该属性设置为样式字符串时才持久存在。您也可以设置<!-- 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>
支持的任何其他样式,例如Html:fromHtml(...)
为默认文字颜色,这在显示上没有区别。
答案 1 :(得分:2)
您可以将EditText设置为具有自定义透明可绘制或仅使用
android:background="@android:color/transparent".
答案 2 :(得分:1)
根据我的理解。在editText中使用它
android:background="@android:color/transparent"
如果您想停止键入的拼写检查文本,请使用
android:inputType="textNoSuggestions"
答案 3 :(得分:1)
在xml中使用inputType textNoSuggestions
。
<EditText
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="text|textNoSuggestions"/>
InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS 是使用代码的等效标志
答案 4 :(得分:1)
我已经看到了上面给出的所有有效答案。但在最后一次尝试你可以这样:
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mEditText.clearComposingText();
}
},200);
}
});
ClearComposingText方法将对您有所帮助。希望这会有所帮助。
答案 5 :(得分:1)
这肯定会帮助你。只需更改主题样式即可。
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="textInputStyle">@style/Widget.MyApp.TextInputLayout</item>
</style>
<style name="Widget.MyApp.TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
<item name="boxStrokeWidth">0dp</item>
<item name="boxStrokeWidthFocused">0dp</item>
</style>
答案 6 :(得分:0)
使用 android:inputType = "textVisiblePassword"
去除文本下多余的下划线
并使用 android:background="@android:color/transparent"
删除 EditText 的底部下划线