Toolbar内EditText光标与下划线不显示问题求助
嘿,我来帮你排查一下这个Toolbar里EditText光标和下划线不显示的问题!大概率是这几个地方出了状况,咱们一步步来解决:
可能的问题与解决方案
1. 下划线(EditText背景)不显示的核心原因
你的Toolbar背景是@color/colorPrimary,而默认EditText的下划线颜色可能和它接近甚至一致,导致肉眼看不见;另外,你没有主动指定下划线的颜色,默认样式可能被Toolbar的主题覆盖了。
- 解决方案:给EditText添加
android:backgroundTint属性指定下划线颜色,比如设为白色:
如果需要兼容低版本系统,改用android:backgroundTint="@color/white"app:backgroundTint(需确保依赖AppCompat库)。
2. 光标不显示的潜在问题
(1)textCursorDrawable设置异常
虽然API 21+允许直接用颜色值设置android:textCursorDrawable,但在AppCompat主题下偶尔会不生效。
- 解决方案:创建一个自定义光标drawable文件(比如
drawable/cursor_white.xml):
然后把EditText的<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/white"/> <size android:width="2dp"/> </shape>android:textCursorDrawable指向这个drawable:android:textCursorDrawable="@drawable/cursor_white"
(2)焦点未真正获取
你调用了requestFocus(),但Toolbar本身可能存在焦点抢占,或者需要先让Toolbar完全显示再请求焦点。
- 解决方案:把请求焦点的代码放到Toolbar显示动画完成后,借助
post()确保视图已加载:toolbar.visibility = View.VISIBLE toolbar.animate().alpha(1.0f).start() editText?.post { editText.requestFocus() // 顺带唤起软键盘,确保焦点状态可见 val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT) }
(3)setTextIsSelectable(true)的干扰
这个方法会让EditText进入文本选择模式,可能会干扰光标的正常显示。如果不需要文本选择功能,直接去掉这行代码;如果需要,确保保留focusable和focusableInTouchMode为true(你已经设置了,可以再确认)。
3. EditText布局高度问题
你的EditText设置了android:layout_height="wrap_content",在Toolbar里可能高度不足,导致光标和下划线被截断。
- 解决方案:把高度改为
match_parent,并添加内边距让内容居中:android:layout_height="match_parent" android:gravity="center_vertical" android:paddingVertical="8dp"
调整后的完整代码示例
XML布局
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" app:collapseIcon="@drawable/ic_arrow_up_24dp" app:titleTextColor="@color/white" android:layout_alignParentTop="true" android:animateLayoutChanges="true" android:visibility="gone" android:alpha="0.0" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:paddingVertical="8dp" android:cursorVisible="true" android:focusable="true" android:focusableInTouchMode="true" android:hint="Search..." android:textCursorDrawable="@drawable/cursor_white" android:textColor="@color/md_white_1000" android:backgroundTint="@color/white" android:layout_marginRight="120dp" /> </LinearLayout> </android.support.v7.widget.Toolbar>
Kotlin代码
toolbar.visibility = View.VISIBLE toolbar.animate().alpha(1.0f).start() editText?.visibility = View.VISIBLE editText?.isCursorVisible = true editText?.setRawInputType(InputType.TYPE_CLASS_TEXT) editText?.post { editText.requestFocus() val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT) }
内容的提问来源于stack exchange,提问作者MrRobot9
相关产品推荐
相关产品推荐

