Xamarin Forms在Listview中调整图像大小

时间:2014-10-26 22:31:22

标签: xamarin android-imageview android-image xamarin.forms

如何在列表视图中设置图像的大小。目前我有几个有图标的列表,但我没有看到任何更改图像宽高比或大小的选项,所以它只会被炸成列表项的高度。

所有图片均来自Drawable文件夹

        var cell = new DataTemplate(typeof(MenuTextCell));
        cell.SetBinding(TextCell.TextProperty, "Title");
        cell.SetBinding(ImageCell.ImageSourceProperty, "IconSource");
        cell.SetValue(BackgroundColorProperty, Color.Transparent);
        cell.SetValue(TextCell.TextColorProperty, Color.FromHex("262626"));

我正在使用自定义渲染器

public class MenuTextCellRenderer : ImageCellRenderer
    {
        protected override View GetCellCore (Cell item, View convertView, ViewGroup parent, Context context)
        {
            var cell = (LinearLayout)base.GetCellCore (item, convertView, parent, context);
            cell.SetPadding(20, 10, 0, 10);
            cell.DividerPadding = 50;

            var div = new ShapeDrawable();
            div.SetIntrinsicHeight(1);
            div.Paint.Set(new Paint { Color = Color.FromHex("b7b7b7").ToAndroid() });

            if (parent is ListView)
            {
                ((ListView)parent).Divider = div;
                ((ListView)parent).DividerHeight = 1;
            }

            var icon = (ImageView)cell.GetChildAt(0);

            var label = (TextView)((LinearLayout)cell.GetChildAt(1)).GetChildAt(0);
            label.SetTextColor(Color.FromHex("262626").ToAndroid());
            label.TextSize = Font.SystemFontOfSize(NamedSize.Large).ToScaledPixel();
            label.TextAlignment = TextAlignment.Center;
            label.Text = label.Text.ToUpper();

            var secondaryLabel = (TextView)((LinearLayout)cell.GetChildAt(1)).GetChildAt(1);
            secondaryLabel.SetTextColor(Color.FromHex("262626").ToAndroid());
            secondaryLabel.TextSize = Font.SystemFontOfSize(NamedSize.Large).ToScaledPixel();
            label.TextAlignment = TextAlignment.Center;


            return cell;
        }

2 个答案:

答案 0 :(得分:1)

您现在正在处理 Android ImageView

您可以通过var icon = (ImageView)cell.GetChildAt(0)进行参考。

现在,您可以通过.setScaleType()等相关宽高比的方法对其进行自定义,并使用.layout()更改位置/尺寸。

答案 1 :(得分:0)

在ListView.ItemTemplate上尝试这样的方法,而不是使用imagecell。您也可以编写自定义单元格。

<DataTemplate>
<ViewCell>
    <StackLayout VerticalOptions="FillAndExpand" Orientation="Horizontal" Padding="10"> 
        <Image Aspect="AspectFill" HeightRequest ="20" WidthRequest="20" Source="{Binding IconSource}" /> 
        <Label Text="{Binding Title}" YAlign="Center" Font="Medium" />
    </StackLayout>
</ViewCell>