我有一个自定义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部分'工作'就像在它中选择单元格的颜色但颜色保持不变。我只希望所选单元格具有不同的背景颜色。有任何想法吗?
答案 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>
这可以在任何列表视图中解决我选择的背景颜色。我想这可以帮到你。