【发布时间】:2021-12-17 12:47:30
【问题描述】:
我无法弄清楚为什么我正在使用的可绘制对象没有显示为列表项的背景和边框。这是名为 ticketborder.xml 的文件中的可绘制对象:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ff00ff00"/>
<stroke android:width="4dp" android:color="#ffff0000"/>
</shape>
在设计器中,我看到了这个的渲染。它看起来是正确的。我还在 XML 中将其用作项目布局的背景,它在那里看起来不错。
在适配器中的 getView() 函数中,我尝试解决任何 XML 问题并使用以下代码:
v.setBackground( ContextCompat.getDrawable(context, R.drawable.ticketborder ) );
这什么也不做,边框不显示,背景颜色也不显示。为了测试代码甚至可以设置这个视图的背景,我这样做了:
v.setBackgroundColor( Color.RED );
这很好用。不知何故,只有drawable不起作用。或者可能与在适配器中调用 getView() 函数时使用的列表项有关。我知道drawable是有效的,因为设计师展示了它。设计器还会在列表项的布局中显示边框和背景的预览。这是使用可绘制对象的列表项的布局:
?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
android:padding="44dp"
android:descendantFocusability="blocksDescendants"
android:background="@drawable/ticketborder">
...
我还要提一提的是,当我几个月前为此编写代码时,边框显示得很好。我能回忆起的唯一一件事是对 Android Studio 的更新。我确定在过去的几个月里我搞砸了一些代码,但我一生都无法弄清楚如何做任何事情,使背景可绘制不能正常工作,而简单的颜色就可以了。
这是设计师在绘制可绘制对象时拍摄的照片:
这是我在编辑列表项布局时的设计视图图片:
最后,使用红色背景颜色时模拟器上的屏幕图片(实体手机具有相同的行为):
并使用可绘制对象:
编辑:
这可行,但我不知道为什么,我不确定如何修改代码中的颜色和边框颜色:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#00ff00"/>
<stroke android:width="2dp" android:color="#ff0000"/>
</shape>
</item>
</layer-list>
我无法解释为什么这是有效的,并且之前的形状定义不起作用。我相当确定我还有其他具有形状的 LinearLayout 元素,因为我有几个地方在 UI 元素周围的边框上添加了圆角。我需要检查那些是否停止工作:(
【问题讨论】:
标签: android listview android-adapter android-drawable