2014-10-26 2 views
0

Как установить размер изображения внутри вида списка. В настоящее время у меня есть несколько списков, в которых есть значки, но я не вижу никаких параметров для изменения соотношения сторон или размера изображения, чтобы он просто взорвался до высоты элемента списка.Xamarin Forms Resize Image внутри Listview

все изображения из папки 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; 
     } 

ответ

1

Вы теперь имеем дело с AndroidImageView.

У вас есть ссылка через var icon = (ImageView)cell.GetChildAt(0).

Теперь вы можете настроить его с помощью таких вещей, как .SetScaleType для связанных с соотношением сторон, и использовать .Layout() изменить положение/размер.

+0

так .Layout() кажется, что он имеет дело с позиции штрафа, но я не вижу, что связано с размером. – BillPull

+0

@BillPull - его третий и четвертый параметры для регулировки ширины и высоты. – Pete

+0

Можно ли это объявить в XAML? –

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> 

Смежные вопросы