gpt4 book ai didi

android - 为什么为我的 ListView 元素的背景分配颜色不能覆盖整个 ListView 背景,而分配可绘制对象却可以?

转载 作者:行者123 更新时间:2023-11-30 04:08:59 25 4
gpt4 key购买 nike

我有一个 ListView它位于平板电脑屏幕的左侧。我的目标是给它一个纯色背景,右侧有一个边框,然后在列表元素上应用重叠背景以打破该边框,使其看起来像是右侧 View 的一部分。


ListView 背景

我使用 <layer-list> 获得了正确的边框可绘制 as suggested by Emile in another question :

右边框.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/black" />
</shape>
</item>
<item android:right="2dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
</shape>
</item>

</layer-list>

...这里是一个很好的衡量标准的 ListView 定义:

<ListView
android:id="@+id/msglist"
android:layout_width="300dp"
android:layout_height="match_parent"
android:divider="@color/black"
android:dividerHeight="1dp"
android:background="@drawable/rightborder"
android:paddingRight="0dip">
</ListView>
<!-- I added the android:paddingRight after reading something
about shape drawables and padding, don't think it actually
did anything. -->

尝试用颜色覆盖它

为了达到预期的效果,我在getView中放置了以下内容我的适配器的功能:

//If it's selected, highlight the background
if(position == mSelectedIndex)
convertView.setBackgroundColor(R.color.light_gray);

else
convertView.setBackgroundResource(0);

但是,使用这种方法,ListView 的黑色边框的可绘制对象仍然可见,只有背景的白色部分被灰色替换。这是一个屏幕截图:

Border showing through color background


用drawable修复它

凭直觉,我将分配的颜色替换为 shape可绘制:

selectedmessage.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/light_gray" />
</shape>

获取 View fragment :

//If it's selected, highlight the background
if(position == mSelectedIndex)
convertView.setBackgroundResource(R.drawable.selectedmessage);

else
convertView.setBackgroundResource(0);

这样就达到了预期的效果,如下图:

Border no longer showing


问题:

为什么将矩形指定为我的 ListView 的背景?元素覆盖整个 View ,同时分配颜色允许黑色边框显示出来?我很高兴它能正常工作,但我想知道为什么 Android 以这种方式呈现 View ,以便我可以了解更多有关 Android 如何呈现 View 的信息。

其他说明:

  • 我正在标准的 Android 3.2 模拟器中运行该项目,如果可以的话差异。
  • 一个线索可能是 light_gray颜色背景似乎比 light_gray 更暗shape资源。
  • 我怀疑这会有所不同,但是 light_gray是:

    <color name="light_gray">#FFCCCCCC</color>

最佳答案

你不能这样做:

 convertView.setBackgroundColor(R.color.light_gray);

setBackgroundColor 不采用资源 ID:http://developer.android.com/reference/android/view/View.html#setBackgroundColor(int)

所以你会得到一些偶然的行为,而不是按照你的预期去做。

你必须这样做:

 convertView.setBackgroundColor(getResources().getColor(R.color.light_gray);

http://developer.android.com/reference/android/content/res/Resources.html#getColor(int)

关于android - 为什么为我的 ListView 元素的背景分配颜色不能覆盖整个 ListView 背景,而分配可绘制对象却可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11132412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com