我如何隐藏EditText下划线(提示行与小衬线在结束)?
可能有更好的方法来做我想做的事情:我有一个带有EditText的布局。通常情况下,在用户可以点击它并开始输入或编辑文本的地方显示正常。
但是,有时我想使用相同的布局(简化其他逻辑)以只读方式显示相同的数据。我希望演示是类似的-它应该有相同的高度和相同的字体,但没有下划线。
作为一种权宜之计,我将通过删除EditText并替换TextView来实现这一点。我认为这将带来预期的结果,但它似乎是一种迂回的昂贵的方式来完成一些本应该通过改变属性来轻松完成的事情。
如果您希望这影响EditText的所有实例以及从它继承的任何类,那么您应该在主题中设置属性editTextBackground的值。
<item name="android:editTextBackground">@drawable/bg_no_underline</item>
我使用的一个可绘制的例子是:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
<item android:drawable="@android:color/transparent"/>
</selector>
</inset>
这是默认材质设计实现的稍微修改版本。
当应用它时,它会让你所有的EditText删除整个应用程序的下划线,你不必手动应用每个样式。
还可以为editText定义一个STYLE,这样就可以重新组合所有属性。这是非常强大的,如果你有多个编辑文本,需要有行为
将代码放在res/values/styles.xml中
<样式
<项目=“android:背景”>@color/透明</项目> //NO UNDERBAR
< name = " android项目:maxLines " > 1 < - >项目
<项目=“android:height”>28dp</项目> //COMMON height
< / style >
之后,您只需要在editText中调用它
<EditText
android:id="@+id/edit1"
style="@style/MyEditTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edit2"
style="@style/MyEditTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
我有这样的东西,非常非常有用:
generalEditText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
其中generalEditText是我的EditText,白色是:
<color name="white">#ffffff</color>
这将不会删除填充,您的EditText将保持原样。只有底部的行将被删除。有时这样做更有用。
如果你使用android:background="@null",因为许多人建议你失去填充和EditText变得更小。至少,这是我的案子。
一个小提示是,如果你设置后台为空,并尝试我上面提供的java代码,你的应用程序将在执行后立即崩溃。(因为它得到了背景,但它是空的。)这可能是显而易见的,但我认为指出这一点很重要。
另一个选择,你可以创建自己的自定义EditText,像这样:
class CustomEditText : androidx.appcompat.widget.AppCompatEditText {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
private val paint = Paint()
private val path = Path()
init { // hide your underbar
this.setBackgroundResource(android.R.color.transparent)
// other init stuff...
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
// draw your canvas...
}
}