从自定义列表Xamarin中设置所选列表视图项的背景颜色

时间:2016-05-31 17:14:07

标签: listview xamarin xamarin.forms

我有一个自定义ListView和一个自定义ViewCell,用于iOS和Android的Xamarin Forms项目。我创建了自定义listView,以便我的列表可以替换颜色(这非常成功)。不幸的是,当我创建自定义ListView时,它停止突出显示所选单元格,这就是我创建自定义ViewCells的原因。

我遇到了android方面的问题。我可以在选择单元格时更改颜色。但是,我不确定如果选择另一个单元格后如何更改颜色。

这是我的CustomList类......

public class CustomList : ListView
{
    public CustomList (){}

    protected override void SetupContent(Cell content, int index)
    {
        base.SetupContent (content, index);
        var currentCell = content as ViewCell; 

        currentCell.View.BackgroundColor = index % 2 == 0 ? Color.FromRgb (235, 235, 235) : Color.FromRgb (255, 255, 255); 
    }
}

非常简单,只需根据索引设置颜色即可。 (也许我可以在这里添加其他东西来处理选定的单元格?)

继承CustomCell类:

public class CustomCell : ViewCell
{
    public const String isSelectedProperty = "IsSelected"; 

    public CustomCell ()
    {
    }
}

并在iOS渲染器中:

public class CustomCellRenderer : ViewCellRenderer
{
    private UIView view; 


    public CustomCellRenderer ()
    {
    }

    public override UITableViewCell GetCell (Cell item, UITableViewCell reusableCell, UITableView tv)
    {
        var cell = base.GetCell (item, reusableCell, tv); 

        if (view == null) {
            view = new UIView (cell.SelectedBackgroundView.Bounds);
            view.Layer.BackgroundColor = UIColor.FromRGB (128, 204,255).CGColor;  
        }
        cell.SelectedBackgroundView = view; 
        return cell; 
    }
}

和android渲染器:

public class CustomCellRenderer : ViewCellRenderer
{
    public CustomCellRenderer ()
    {
    }

    protected override Android.Views.View GetCellCore(Cell item, Android.Views.View convertView, ViewGroup parent, Context context)
    {
        var cell = base.GetCellCore (item, convertView, parent, context);
        return cell;
    }

    protected override void OnCellPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {

        base.OnCellPropertyChanged (sender, e);
        var customCell = sender as CustomCell; 
        if (e.PropertyName == CustomCell.isSelectedProperty) {
            customCell.View.BackgroundColor = Color.FromRgb (128, 204, 255); 
        } 

    }
}

所以iOS部分有效。并且android部分'工作'就像在它中选择单元格的颜色但颜色保持不变。我只希望所选单元格具有不同的背景颜色。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

对于Android,我在自定义主题定义的styles.xml中设置了:

<item name="android:colorFocusedHighlight">@color/color_coloredbackground</item>
<item name="android:colorActivatedHighlight">@color/color_coloredbackground</item>
<item name="android:activatedBackgroundIndicator">@color/color_coloredbackground</item>

这可以在任何列表视图中解决我选择的背景颜色。我想这可以帮到你。