我想设置一个动态创建的编辑文本的背景,同时有它的下划线.现在它有了背景,但没有下划线.当我删除setBackround()时,会显示下划线.

我try 了一个像那样的编辑文本的构造函数,但没有帮助:etTitle = new EditText(new ContextThemeWrapper(fragment.requireContext(), R.style.editText));

我不想在这个背景下保持透明度.

                etTitle = new EditText(fragment.requireContext());
                etTitle.setId(Util.getIdNotUsed(fragment.requireActivity()));

                TypedArray a = fragment.requireActivity().getTheme().obtainStyledAttributes(isDarkMode ? R.style.notepad_dark : R.style.notepad_light, new int[] {R.attr.myColorBottomNavigationViewBg});
                int attributeResourceId = a.getResourceId(0, 0);
                Drawable drawable = ContextCompat.getDrawable(fragment.requireContext(), attributeResourceId);

                etTitle.setBackground(drawable);

如何解决这个问题?

推荐答案

Android EditText下划线通常是可绘制的默认背景的一部分.设置一个新的背景可绘制自然会覆盖它,为了解决这个问题,我 Select 了分层可绘制,它允许将多个可绘制堆叠在一起.这样你就有了定制背景和默认下划线,然后将其设置为EditText的背景(当然,你也可以从代码创建可绘制的):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="@color/your_background_color"/>
    </item>
    <item>
        <bitmap
            android:gravity="bottom"
            android:src="@drawable/your_underline_image" />
    </item>
</layer-list>

然后在您的代码中使用它

Drawable layeredDrawable = ContextCompat.getDrawable(fragment.requireContext(), R.drawable.your_layered_drawable);
etTitle.setBackground(layeredDrawable);

Java相关问答推荐

Java JAR环境(JRE)是否支持模块?

Quarkus keycloat配置不工作.quarkus. keycloak. policy—enforcer. enable = true在. yaml表示中不工作

如何在访问完所有文件后加入所有线程?

基本时态运算的ISO-8601周数据表示法

Java编译器抛出可能未正确初始化的错误?

Kotlin内联互操作:强制装箱

为什么S的文档中说常量方法句柄不能在类的常量池中表示?

带错误BER验证的itext8签名返回pdf

使用多个RemoteDatabase对象的一个线程

如何在JavaFX中处理多个按钮

如何配置空手道以使用FeignClient或RestTemplate代替ApacheHttpClient

try 在两个不同数组的数字之间求平均值

通过Java列表中的某些字段搜索值

JFree Chart从图表中删除边框

当我将JTextField的getText函数与相等的String进行比较时;t返回true

获取401未经授权,即使在标头中设置了浏览器名称和cookie

为什么我得到默认方法的值而不是被覆盖的方法的值?

在JSON上获取反斜杠

@此处不能应用可为null的批注

如何在Java中正确实现填字游戏求解器