StickyListHeadersAdapter 定义多个 ColorDrawable 对象并将它们显示为背景色。当使用相同的颜色时,它是有问题的

问题描述 投票:0回答:1

我自己解决了这个问题,但解决方法激怒了我;我希望这对某人有用。我将在下面发布解决方案...

我正在使用该套件

import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;

定义自定义适配器

public class MyCustomStickyListAdapter extends BaseAdapter implements StickyListHeadersAdapter, Filterable
{ ... }

显示(例如)

Movies
的过滤列表,并根据某些条件我想为行着色多种颜色。

对于每个失败的标准,我想添加默认颜色

white
而不是通过颜色
green, red, pink

在我的

getView()
方法中;在返回 ConvertView 之前,我使用一种方法设置视图的背景颜色...

private void setViewCompositeBackgroundColor(View convertView, ColorDrawable[] colors){
        LayerDrawable background = new LayerDrawable(colors);

        for(int i = 0; i < colors.length; i++)
        {
            background.setLayerInsetLeft(i, (i * windowWidth) / colors.length);
            background.setLayerInsetRight(i, windowWidth - (((i + 1) * windowWidth) / colors.length));

        }

        convertView.setBackground(background);
    }

ColorDrawables 是类变量,我在构造函数中定义它们......

colorDefault = new ColorDrawable(ContextCompat.getColor(context, R.color.colorDefault));
等等...

如果我将两种具有相同颜色 ID 的颜色传递给此方法(两种“默认”白色),那么它将把具有相同颜色 ID 的所有左侧图层移动到最右侧图层的位置;我通过使图层不透明并使用白色以外的颜色作为默认颜色来检查这一点,并注意到如果满足两个默认条件,那么最右边的图层是最暗的,而左边的图层仍然是默认的 ListView 颜色。

我定义了一个 .xml 值文件,其颜色如下......

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="green">@color/Green</color>
    <color name="red">@color/red</color>
    <color name="pink">@android:color/pink</color>
    <color name="default">@color/White</color>
</resources>

例如,如果前两个条件解析为

default white
。第三个标准是
pink
它看起来像这样(灰色只是默认的 ListView 背景颜色)... Actual

但我希望它看起来像这样...... Expected

java android listview adapter
1个回答
0
投票

这是解决方法,我定义了唯一的默认颜色,偏移 1hx。

<color name="colorDefault">#FFFFFF</color>
<color name="colorDefault1">#FFFFFE</color>
<color name="colorDefault2">#FFFFFD</color>
<color name="colorDefault3">#FFFFFC</color>
<color name="colorDefault4">#FFFFFB</color>

对于我想使用默认颜色白色的每一层;我使用了不同的白色阴影,并且 ColorDrawables 停止将自身移动到最右边的重复使用的颜色。

© www.soinside.com 2019 - 2024. All rights reserved.