Added mobile apps Splash

Created Cart layout
Completed Tabs layout
This commit is contained in:
Javier Suárez Ruiz 2016-11-15 13:12:16 +01:00
parent 9201160fe1
commit 71b010bb92
35 changed files with 524 additions and 306 deletions

View File

@ -100,6 +100,7 @@
<!-- CONVERTERS --> <!-- CONVERTERS -->
<converters:ToUpperConverter x:Key="ToUpperConverter" /> <converters:ToUpperConverter x:Key="ToUpperConverter" />
<converters:DatetimeConverter x:Key="DatetimeConverter" /> <converters:DatetimeConverter x:Key="DatetimeConverter" />
<converters:ImageConverter x:Key="ImageConverter" />
<converters:ItemTappedEventArgsConverter x:Key="ItemTappedEventArgsConverter" /> <converters:ItemTappedEventArgsConverter x:Key="ItemTappedEventArgsConverter" />
<!-- STYLES --> <!-- STYLES -->

View File

@ -0,0 +1,22 @@
using System;
using System.Globalization;
using Xamarin.Forms;
namespace eShopOnContainers.Core.Converters
{
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return string.Empty;
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -1,13 +1,16 @@
using System; namespace eShopOnContainers.Core.Models.Catalog
namespace eShopOnContainers.Core.Models.Catalog
{ {
public class CatalogItem public class CatalogItem
{ {
public int Id { get; set; } public string Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Description { get; set; } public string Description { get; set; }
public decimal Price { get; set; } public decimal Price { get; set; }
public string Image { get; set; } public string PictureUri { get; set; }
public int CatalogBrandId { get; set; }
public string CatalogBrand { get; set; }
public int CatalogTypeId { get; set; }
public string CatalogType { get; set; }
} }
} }

View File

@ -1,17 +1,90 @@
using System; using eShopOnContainers.ViewModels.Base;
using System;
namespace eShopOnContainers.Core.Models.Orders namespace eShopOnContainers.Core.Models.Orders
{ {
public class OrderItem public class OrderItem : ExtendedBindableObject
{ {
public int ProductId { get; set; } private string _productImage;
public Guid OrderId { get; set; } private int _productId;
public string ProductName { get; set; } private Guid _orderId;
public decimal UnitPrice { get; set; } private string _productName;
public int Quantity { get; set; } private decimal _unitPrice;
public decimal Discount { get; set; } private int _quantity;
private decimal _discount;
public int ProductId
{
get { return _productId; }
set
{
_productId = value;
RaisePropertyChanged(() => ProductId);
}
}
public Guid OrderId
{
get { return _orderId; }
set
{
_orderId = value;
RaisePropertyChanged(() => OrderId);
}
}
public string ProductName
{
get { return _productName; }
set
{
_productName = value;
RaisePropertyChanged(() => ProductName);
}
}
public decimal UnitPrice
{
get { return _unitPrice; }
set
{
_unitPrice = value;
RaisePropertyChanged(() => UnitPrice);
}
}
public int Quantity
{
get { return _quantity; }
set
{
_quantity = value;
RaisePropertyChanged(() => Quantity);
}
}
public decimal Discount
{
get { return _discount; }
set
{
_discount = value;
RaisePropertyChanged(() => Discount);
}
}
public decimal Total { get { return Quantity * UnitPrice; } } public decimal Total { get { return Quantity * UnitPrice; } }
public string ProductImage
{
get { return _productImage; }
set
{
_productImage = value;
RaisePropertyChanged(() => ProductImage);
}
}
public override string ToString() public override string ToString()
{ {
return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity); return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity);

View File

@ -1,6 +1,7 @@
using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Models.Catalog;
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xamarin.Forms; using Xamarin.Forms;
@ -8,16 +9,25 @@ namespace eShopOnContainers.Core.Services.Catalog
{ {
public class CatalogMockService : ICatalogService public class CatalogMockService : ICatalogService
{ {
public async Task<ObservableCollection<CatalogItem>> GetProductsAsync() private ObservableCollection<CatalogItem> MockCatalog = new ObservableCollection<CatalogItem>
{
new CatalogItem { Id = "1", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M },
new CatalogItem { Id = "2", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M },
new CatalogItem { Id = "3", PictureUri = Device.OS != TargetPlatform.Windows? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M }
};
public async Task<ObservableCollection<CatalogItem>> GetCatalogAsync()
{ {
await Task.Delay(500); await Task.Delay(500);
return new ObservableCollection<CatalogItem> return MockCatalog;
}
public async Task<CatalogItem> GetCatalogItemAsync(string id)
{ {
new CatalogItem { Id = 1, Image = Device.OS != TargetPlatform.Windows ? "fake_product_01" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M }, await Task.Delay(500);
new CatalogItem { Id = 2, Image = Device.OS != TargetPlatform.Windows ? "fake_product_02": "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M },
new CatalogItem { Id = 3, Image = Device.OS != TargetPlatform.Windows ? "fake_product_03": "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M } return MockCatalog.FirstOrDefault(c => c.Id == id);
};
} }
} }
} }

View File

@ -6,6 +6,7 @@ namespace eShopOnContainers.Core.Services.Catalog
{ {
public interface ICatalogService public interface ICatalogService
{ {
Task<ObservableCollection<CatalogItem>> GetProductsAsync(); Task<ObservableCollection<CatalogItem>> GetCatalogAsync();
Task<CatalogItem> GetCatalogItemAsync(string id);
} }
} }

View File

@ -1,7 +1,11 @@
using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.Core.Models.Catalog;
using eShopOnContainers.Core.Models.Orders;
using eShopOnContainers.Core.Services.Orders; using eShopOnContainers.Core.Services.Orders;
using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.ViewModels.Base; using eShopOnContainers.ViewModels.Base;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xamarin.Forms; using Xamarin.Forms;
@ -10,7 +14,8 @@ namespace eShopOnContainers.Core.ViewModels
public class CartViewModel : ViewModelBase public class CartViewModel : ViewModelBase
{ {
private int _badgeCount; private int _badgeCount;
private Order _order; private ObservableCollection<OrderItem> _orderItems;
private decimal _total;
private IOrdersService _orderService; private IOrdersService _orderService;
@ -29,24 +34,70 @@ namespace eShopOnContainers.Core.ViewModels
} }
} }
public Order Order public ObservableCollection<OrderItem> OrderItems
{ {
get { return _order; } get { return _orderItems; }
set set
{ {
_order = value; _orderItems = value;
RaisePropertyChanged(() => Order); RaisePropertyChanged(() => OrderItems);
} }
} }
public override async Task InitializeAsync(object navigationData) public decimal Total
{ {
MessagingCenter.Subscribe<CatalogViewModel>(this, MessengerKeys.AddProduct, (sender) => get { return _total; }
set
{
_total = value;
RaisePropertyChanged(() => Total);
}
}
public override Task InitializeAsync(object navigationData)
{
MessagingCenter.Subscribe<CatalogViewModel, CatalogItem>(this, MessengerKeys.AddProduct, (sender, arg) =>
{ {
BadgeCount++; BadgeCount++;
AddCartItem(arg);
}); });
Order = await _orderService.GetCartAsync(); OrderItems = new ObservableCollection<OrderItem>();
return base.InitializeAsync(navigationData);
}
private void AddCartItem(CatalogItem item)
{
if (OrderItems.Any(o => o.ProductId == Convert.ToInt32(item.Id)))
{
var orderItem = OrderItems.First(o => o.ProductId == Convert.ToInt32(item.Id));
orderItem.Quantity++;
}
else
{
OrderItems.Add(new OrderItem
{
ProductId = Convert.ToInt32(item.Id),
ProductName = item.Name,
ProductImage = item.PictureUri,
UnitPrice = item.Price,
Quantity = 1
});
}
ReCalculateTotal();
}
private void ReCalculateTotal()
{
Total = 0;
foreach (var orderItem in OrderItems)
{
Total += orderItem.Total;
}
} }
} }
} }

View File

@ -5,13 +5,13 @@ using Xamarin.Forms;
using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Models.Catalog;
using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Services.Catalog;
using System.Windows.Input;
namespace eShopOnContainers.Core.ViewModels namespace eShopOnContainers.Core.ViewModels
{ {
public class CatalogViewModel : ViewModelBase public class CatalogViewModel : ViewModelBase
{ {
private ObservableCollection<CatalogItem> _products; private ObservableCollection<CatalogItem> _products;
private CatalogItem _product;
private ICatalogService _productsService; private ICatalogService _productsService;
@ -30,28 +30,20 @@ namespace eShopOnContainers.Core.ViewModels
} }
} }
public CatalogItem Product public ICommand AddCatalogItemCommand => new Command<CatalogItem>(AddCatalogItem);
{
get { return _product; }
set
{
_product = value;
if (_product != null)
{
AddProduct();
}
}
}
public override async Task InitializeAsync(object navigationData) public override async Task InitializeAsync(object navigationData)
{ {
Products = await _productsService.GetProductsAsync(); IsBusy = true;
Products = await _productsService.GetCatalogAsync();
IsBusy = false;
} }
private void AddProduct() private void AddCatalogItem(CatalogItem catalogItem)
{ {
MessagingCenter.Send(this, MessengerKeys.AddProduct); MessagingCenter.Send(this, MessengerKeys.AddProduct, catalogItem);
} }
} }
} }

View File

@ -2,6 +2,7 @@
using eShopOnContainers.ViewModels.Base; using eShopOnContainers.ViewModels.Base;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows.Input; using System.Windows.Input;
using Xamarin.Forms; using Xamarin.Forms;
@ -73,6 +74,8 @@ namespace eShopOnContainers.Core.ViewModels
{ {
try try
{ {
await Task.Delay(1000);
isAuthenticated = true; isAuthenticated = true;
} }
catch (Exception ex) catch (Exception ex)

View File

@ -1,6 +1,8 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.Core.Models.Orders;
using eShopOnContainers.ViewModels.Base; using eShopOnContainers.ViewModels.Base;
using eShopOnContainers.Core.Services.Orders;
using eShopOnContainers.Core.Services.Catalog;
namespace eShopOnContainers.Core.ViewModels namespace eShopOnContainers.Core.ViewModels
{ {
@ -8,6 +10,16 @@ namespace eShopOnContainers.Core.ViewModels
{ {
private Order _order; private Order _order;
private IOrdersService _orderService;
private ICatalogService _catalogService;
public OrderDetailViewModel(IOrdersService orderService,
ICatalogService catalogService)
{
_orderService = orderService;
_catalogService = catalogService;
}
public Order Order public Order Order
{ {
get { return _order; } get { return _order; }
@ -18,14 +30,24 @@ namespace eShopOnContainers.Core.ViewModels
} }
} }
public override Task InitializeAsync(object navigationData) public override async Task InitializeAsync(object navigationData)
{ {
if(navigationData is Order) if(navigationData is Order)
{ {
Order = navigationData as Order; IsBusy = true;
var order = navigationData as Order;
foreach (var orderItem in order.OrderItems)
{
var catalogItem = await _catalogService.GetCatalogItemAsync(orderItem.ProductId.ToString());
orderItem.ProductImage = catalogItem.PictureUri;
} }
return base.InitializeAsync(navigationData); Order = order;
IsBusy = false;
}
} }
} }
} }

View File

@ -35,13 +35,21 @@ namespace eShopOnContainers.Core.ViewModels
public override async Task InitializeAsync(object navigationData) public override async Task InitializeAsync(object navigationData)
{ {
IsBusy = true;
Orders = await _ordersService.GetOrdersAsync(); Orders = await _ordersService.GetOrdersAsync();
IsBusy = false;
} }
private async void LogoutAsync() private async void LogoutAsync()
{ {
IsBusy = true;
await NavigationService.NavigateToAsync<LoginViewModel>(); await NavigationService.NavigateToAsync<LoginViewModel>();
await NavigationService.RemoveBackStackAsync(); await NavigationService.RemoveBackStackAsync();
IsBusy = false;
} }
private void OrderDetail(Order order) private void OrderDetail(Order order)

View File

@ -2,43 +2,19 @@
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="eShopOnContainers.Core.Views.CartView" x:Class="eShopOnContainers.Core.Views.CartView"
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
Title="Cart"> Title="Cart">
<ContentPage.Resources> <ContentPage.Resources>
<ResourceDictionary> <ResourceDictionary>
<Style x:Key="OrderTitleStyle" <Style x:Key="CartTotalStyle"
TargetType="{x:Type Label}"> TargetType="{x:Type Label}">
<Setter Property="FontFamily" <Setter Property="FontFamily"
Value="{StaticResource MontserratRegular}" /> Value="{StaticResource MontserratRegular}" />
<Setter Property="FontSize" <Setter Property="FontSize"
Value="{StaticResource MediumSize}" /> Value="{StaticResource LargerSize}" />
<Setter Property="TextColor" <Setter Property="HorizontalOptions"
Value="Gray" /> Value="End" />
</Style>
<Style x:Key="OrderContentStyle"
TargetType="{x:Type Label}"
BasedOn="{StaticResource OrderTitleStyle}">
<Setter Property="TextColor"
Value="Black" />
</Style>
<Style x:Key="ShippingAddressStyle"
TargetType="{x:Type Label}"
BasedOn="{StaticResource OrderTitleStyle}">
<Setter Property="FontSize"
Value="{StaticResource LargeSize}" />
<Setter Property="TextColor"
Value="Black" />
</Style>
<Style x:Key="AddressStyle"
TargetType="{x:Type Label}"
BasedOn="{StaticResource OrderTitleStyle}">
<Setter Property="FontSize"
Value="{StaticResource LittleSize}" />
<Setter Property="TextColor"
Value="Black" />
</Style> </Style>
</ResourceDictionary> </ResourceDictionary>
@ -47,91 +23,43 @@
<Grid <Grid
BackgroundColor="{StaticResource BackgroundColor}"> BackgroundColor="{StaticResource BackgroundColor}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<!-- ORDER INFO -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackLayout
Grid.Column="0"
Grid.Row="0"
Margin="12">
<Label
Text="ORDER NUMBER"
Style="{StaticResource OrderTitleStyle}"/>
<Label
Text="{Binding Order.OrderNumber, Converter={StaticResource ToUpperConverter}}"
Style="{StaticResource OrderContentStyle}"/>
</StackLayout>
<StackLayout
Grid.Column="0"
Grid.Row="1"
Margin="12">
<Label
Text="TOTAL"
Style="{StaticResource OrderTitleStyle}"/>
<Label
Text="{Binding Order.Total, StringFormat='${0:N}', Converter={StaticResource ToUpperConverter}}"
Style="{StaticResource OrderContentStyle}"/>
</StackLayout>
<StackLayout
Grid.Column="1"
Grid.Row="0"
Margin="12">
<Label
Text="DATE"
Style="{StaticResource OrderTitleStyle}"/>
<Label
Text="{Binding Order.Date, Converter={StaticResource DatetimeConverter}}"
Style="{StaticResource OrderContentStyle}"/>
</StackLayout>
<StackLayout
Grid.Column="1"
Grid.Row="1"
Margin="12">
<Label
Text="STATUS"
Style="{StaticResource OrderTitleStyle}"/>
<Label
Text="{Binding Order.Status, Converter={StaticResource ToUpperConverter}}"
Style="{StaticResource OrderContentStyle}"/>
</StackLayout>
</Grid>
<!-- SHIPPING ADDRESS -->
<Grid
Grid.Row="1"
Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- CART ITEMS -->
<Grid
Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListView
ItemsSource="{Binding OrderItems}"
HasUnevenRows="True"
SeparatorVisibility="None"
VerticalOptions="FillAndExpand"
CachingStrategy="RecycleElement">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<templates:OrderItemTemplate />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<StackLayout
Grid.Row="1"
Margin="0,0,0,24">
<Label <Label
Grid.Row="0" Grid.Row="0"
Text="SHIPPING ADDRESS" Text="TOTAL"
Style="{StaticResource ShippingAddressStyle}"/> TextColor="{StaticResource BlackColor}"
<StackLayout Style="{StaticResource CartTotalStyle}"/>
Grid.Row="1">
<Label <Label
Text="120 E 87th Street" Grid.Row="1"
Style="{StaticResource AddressStyle}"/> Text="{Binding Total, StringFormat='${0:N}'}"
<Label TextColor="{StaticResource GreenColor}"
Text="Seattle, WA" Style="{StaticResource CartTotalStyle}"/>
Style="{StaticResource AddressStyle}"/>
<Label
Text="98122"
Style="{StaticResource AddressStyle}"/>
<Label
Text="United States"
Style="{StaticResource AddressStyle}"/>
</StackLayout> </StackLayout>
</Grid> </Grid>
</Grid> </Grid>

View File

@ -6,6 +6,7 @@
xmlns:views="clr-namespace:eShopOnContainers.Core.Views;assembly=eShopOnContainers.Core" xmlns:views="clr-namespace:eShopOnContainers.Core.Views;assembly=eShopOnContainers.Core"
xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core" xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core"
xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core" xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core"
xmlns:behaviors="clr-namespace:eShopOnContainers.Core.Behaviors;assembly=eShopOnContainers.Core"
Title="Catalog"> Title="Catalog">
<ContentPage.Resources> <ContentPage.Resources>
<ResourceDictionary> <ResourceDictionary>
@ -73,11 +74,16 @@
x:Name="Products" x:Name="Products"
Grid.Row="1" Grid.Row="1"
ItemsSource="{Binding Products}" ItemsSource="{Binding Products}"
SelectedItem="{Binding Product, Mode=TwoWay}"
HasUnevenRows="True" HasUnevenRows="True"
SeparatorVisibility="None" SeparatorVisibility="None"
CachingStrategy="RecycleElement" CachingStrategy="RecycleElement"
Style="{StaticResource ProductsListStyle}"> Style="{StaticResource ProductsListStyle}">
<ListView.Behaviors>
<behaviors:EventToCommandBehavior
EventName="ItemTapped"
Command="{Binding AddCatalogItemCommand}"
EventArgsConverter="{StaticResource ItemTappedEventArgsConverter}" />
</ListView.Behaviors>
<ListView.ItemTemplate> <ListView.ItemTemplate>
<DataTemplate> <DataTemplate>
<ViewCell> <ViewCell>
@ -86,5 +92,22 @@
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </ListView.ItemTemplate>
</ListView> </ListView>
<!-- INDICATOR -->
<ActivityIndicator
Grid.Row="0"
Grid.RowSpan="2"
Color="{StaticResource LightGreenColor}"
IsRunning="{Binding IsBusy}"
IsVisible="{Binding IsBusy}"
VerticalOptions="Center"
HorizontalOptions="Center">
<ActivityIndicator.WidthRequest>
<OnPlatform
x:TypeArguments="x:Double"
iOS="100"
Android="100"
WinPhone="400" />
</ActivityIndicator.WidthRequest>
</ActivityIndicator>
</Grid> </Grid>
</ContentPage> </ContentPage>

View File

@ -146,7 +146,7 @@
</Grid> </Grid>
<!-- INDICATOR --> <!-- INDICATOR -->
<ActivityIndicator <ActivityIndicator
Color="{StaticResource AccentColor}" Color="{StaticResource LightGreenColor}"
IsRunning="{Binding IsBusy}" IsRunning="{Binding IsBusy}"
IsVisible="{Binding IsBusy}" IsVisible="{Binding IsBusy}"
VerticalOptions="Center" VerticalOptions="Center"

View File

@ -29,7 +29,8 @@
</views:ProfileView> </views:ProfileView>
<views:CartView <views:CartView
x:Name="CartView" x:Name="CartView"
controls:CustomTabbedPage.BadgeText="{Binding BadgeCount}"> controls:CustomTabbedPage.BadgeText="{Binding BadgeCount}"
controls:CustomTabbedPage.BadgeColor="{StaticResource LightGreenColor}">
<views:CartView.Icon> <views:CartView.Icon>
<OnPlatform <OnPlatform
x:TypeArguments="FileImageSource" x:TypeArguments="FileImageSource"

View File

@ -228,6 +228,23 @@
Style="{StaticResource OrderTotalStyle}"/> Style="{StaticResource OrderTotalStyle}"/>
</StackLayout> </StackLayout>
</Grid> </Grid>
<!-- INDICATOR -->
<ActivityIndicator
Grid.Row="0"
Grid.RowSpan="3"
Color="{StaticResource LightGreenColor}"
IsRunning="{Binding IsBusy}"
IsVisible="{Binding IsBusy}"
VerticalOptions="Center"
HorizontalOptions="Center">
<ActivityIndicator.WidthRequest>
<OnPlatform
x:TypeArguments="x:Double"
iOS="100"
Android="100"
WinPhone="400" />
</ActivityIndicator.WidthRequest>
</ActivityIndicator>
</Grid> </Grid>
</ScrollView> </ScrollView>
</ContentPage> </ContentPage>

View File

@ -2,7 +2,8 @@
<ContentView <ContentView
xmlns="http://xamarin.com/schemas/2014/forms" xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="eShopOnContainers.Core.Views.Templates.OrderItemTemplate"> x:Class="eShopOnContainers.Core.Views.Templates.OrderItemTemplate"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms">
<ContentView.Resources> <ContentView.Resources>
<ResourceDictionary> <ResourceDictionary>
@ -55,7 +56,8 @@
</ResourceDictionary> </ResourceDictionary>
</ContentView.Resources> </ContentView.Resources>
<ContentView.Content> <ContentView.Content>
<Grid> <Grid
BackgroundColor="{StaticResource BackgroundColor}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
@ -64,10 +66,18 @@
<RowDefinition Height="*" /> <RowDefinition Height="*" />
<RowDefinition Height="1" /> <RowDefinition Height="1" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Image <ffimageloading:CachedImage
Grid.Column="0" Grid.Column="0"
Grid.Row="0" Grid.Row="0"
Source="{Binding Image}"/> Source="{Binding ProductImage, Converter={StaticResource ImageConverter}}"
CacheDuration="30"
CacheType="Disk"
DownsampleToViewSize="True"
HeightRequest="108"
WidthRequest="108"
Aspect="AspectFit"
VerticalOptions="Start"
Margin="12,0,0,0"/>
<Grid <Grid
Grid.Column="1" Grid.Column="1"
Grid.Row="0" Grid.Row="0"

View File

@ -71,7 +71,10 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<ffimageloading:CachedImage <ffimageloading:CachedImage
Grid.Row="0" Grid.Row="0"
Source="{Binding Image}" Source="{Binding PictureUri}"
CacheDuration="30"
CacheType="Disk"
DownsampleToViewSize="True"
Aspect="AspectFill"/> Aspect="AspectFill"/>
<Grid <Grid
Grid.Row="0" Grid.Row="0"
@ -86,7 +89,7 @@
<Image.Margin> <Image.Margin>
<OnPlatform <OnPlatform
x:TypeArguments="Thickness" x:TypeArguments="Thickness"
Android="6, 12, 12, 12" Android="5, 12, 12, 12"
iOS="6, 12, 12, 12" iOS="6, 12, 12, 12"
WinPhone="8, 12, 12, 12"/> WinPhone="8, 12, 12, 12"/>
</Image.Margin> </Image.Margin>

View File

@ -47,6 +47,7 @@
<Compile Include="Controls\BindablePicker.cs" /> <Compile Include="Controls\BindablePicker.cs" />
<Compile Include="Controls\CustomTabbedPage.cs" /> <Compile Include="Controls\CustomTabbedPage.cs" />
<Compile Include="Converters\DatetimeConverter.cs" /> <Compile Include="Converters\DatetimeConverter.cs" />
<Compile Include="Converters\ImageConverter.cs" />
<Compile Include="Converters\ItemTappedConverter.cs" /> <Compile Include="Converters\ItemTappedConverter.cs" />
<Compile Include="Converters\ToUpperConverter.cs" /> <Compile Include="Converters\ToUpperConverter.cs" />
<Compile Include="Effects\LineColorEffect.cs" /> <Compile Include="Effects\LineColorEffect.cs" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
<uses-sdk android:minSdkVersion="15" /> <uses-sdk android:minSdkVersion="15" />
<application android:label="eShopOnContainers.Droid"></application> <application android:label="eShopOnContainers" android:icon="@drawable/icon"></application>
</manifest> </manifest>

View File

@ -22,7 +22,7 @@ namespace eShopOnContainers.Droid.Renderers
} }
private const int DefaultHmarginDip = -10; private const int DefaultHmarginDip = -10;
private const int DefaultVmarginDip = -5; private const int DefaultVmarginDip = 2;
private const int DefaultLrPaddingDip = 4; private const int DefaultLrPaddingDip = 4;
private const int DefaultCornerRadiusDip = 7; private const int DefaultCornerRadiusDip = 7;

View File

@ -76,15 +76,22 @@ namespace eShopOnContainers.Droid.Renderers
Element.ChildRemoved += OnTabRemoved; Element.ChildRemoved += OnTabRemoved;
} }
private void SetTab(TabLayout.Tab tab, string name) private void SetTab(TabLayout.Tab tab, string name)
{ {
try try
{ {
int id = Resources.GetIdentifier(name, "drawable", Context.PackageName); int id = Resources.GetIdentifier(name, "drawable", Context.PackageName);
tab.CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(id);
tab.SetCustomView(Resource.Layout.TabLayout);
tab.SetIcon(null); tab.SetIcon(null);
LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent);
linearLayoutParams.SetMargins(0, -48, 0, 0);
ImageView img = new ImageView(Context);
img.LayoutParameters = linearLayoutParams;
img.SetPadding(0, 0, 0, 48);
img.SetImageResource(id);
tab.SetCustomView(img);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -2021,304 +2021,307 @@ namespace eShopOnContainers.Droid
public const int abc_textfield_search_material = 2130837578; public const int abc_textfield_search_material = 2130837578;
// aapt resource value: 0x7f02004b // aapt resource value: 0x7f02004b
public const int design_fab_background = 2130837579; public const int background = 2130837579;
// aapt resource value: 0x7f02004c // aapt resource value: 0x7f02004c
public const int design_snackbar_background = 2130837580; public const int design_fab_background = 2130837580;
// aapt resource value: 0x7f02004d // aapt resource value: 0x7f02004d
public const int fake_product_01 = 2130837581; public const int design_snackbar_background = 2130837581;
// aapt resource value: 0x7f02004e // aapt resource value: 0x7f02004e
public const int fake_product_02 = 2130837582; public const int fake_product_01 = 2130837582;
// aapt resource value: 0x7f02004f // aapt resource value: 0x7f02004f
public const int fake_product_03 = 2130837583; public const int fake_product_02 = 2130837583;
// aapt resource value: 0x7f020050 // aapt resource value: 0x7f020050
public const int ic_audiotrack = 2130837584; public const int fake_product_03 = 2130837584;
// aapt resource value: 0x7f020051 // aapt resource value: 0x7f020051
public const int ic_audiotrack_light = 2130837585; public const int ic_audiotrack = 2130837585;
// aapt resource value: 0x7f020052 // aapt resource value: 0x7f020052
public const int ic_bluetooth_grey = 2130837586; public const int ic_audiotrack_light = 2130837586;
// aapt resource value: 0x7f020053 // aapt resource value: 0x7f020053
public const int ic_bluetooth_white = 2130837587; public const int ic_bluetooth_grey = 2130837587;
// aapt resource value: 0x7f020054 // aapt resource value: 0x7f020054
public const int ic_cast_dark = 2130837588; public const int ic_bluetooth_white = 2130837588;
// aapt resource value: 0x7f020055 // aapt resource value: 0x7f020055
public const int ic_cast_disabled_light = 2130837589; public const int ic_cast_dark = 2130837589;
// aapt resource value: 0x7f020056 // aapt resource value: 0x7f020056
public const int ic_cast_grey = 2130837590; public const int ic_cast_disabled_light = 2130837590;
// aapt resource value: 0x7f020057 // aapt resource value: 0x7f020057
public const int ic_cast_light = 2130837591; public const int ic_cast_grey = 2130837591;
// aapt resource value: 0x7f020058 // aapt resource value: 0x7f020058
public const int ic_cast_off_light = 2130837592; public const int ic_cast_light = 2130837592;
// aapt resource value: 0x7f020059 // aapt resource value: 0x7f020059
public const int ic_cast_on_0_light = 2130837593; public const int ic_cast_off_light = 2130837593;
// aapt resource value: 0x7f02005a // aapt resource value: 0x7f02005a
public const int ic_cast_on_1_light = 2130837594; public const int ic_cast_on_0_light = 2130837594;
// aapt resource value: 0x7f02005b // aapt resource value: 0x7f02005b
public const int ic_cast_on_2_light = 2130837595; public const int ic_cast_on_1_light = 2130837595;
// aapt resource value: 0x7f02005c // aapt resource value: 0x7f02005c
public const int ic_cast_on_light = 2130837596; public const int ic_cast_on_2_light = 2130837596;
// aapt resource value: 0x7f02005d // aapt resource value: 0x7f02005d
public const int ic_cast_white = 2130837597; public const int ic_cast_on_light = 2130837597;
// aapt resource value: 0x7f02005e // aapt resource value: 0x7f02005e
public const int ic_close_dark = 2130837598; public const int ic_cast_white = 2130837598;
// aapt resource value: 0x7f02005f // aapt resource value: 0x7f02005f
public const int ic_close_light = 2130837599; public const int ic_close_dark = 2130837599;
// aapt resource value: 0x7f020060 // aapt resource value: 0x7f020060
public const int ic_collapse = 2130837600; public const int ic_close_light = 2130837600;
// aapt resource value: 0x7f020061 // aapt resource value: 0x7f020061
public const int ic_collapse_00000 = 2130837601; public const int ic_collapse = 2130837601;
// aapt resource value: 0x7f020062 // aapt resource value: 0x7f020062
public const int ic_collapse_00001 = 2130837602; public const int ic_collapse_00000 = 2130837602;
// aapt resource value: 0x7f020063 // aapt resource value: 0x7f020063
public const int ic_collapse_00002 = 2130837603; public const int ic_collapse_00001 = 2130837603;
// aapt resource value: 0x7f020064 // aapt resource value: 0x7f020064
public const int ic_collapse_00003 = 2130837604; public const int ic_collapse_00002 = 2130837604;
// aapt resource value: 0x7f020065 // aapt resource value: 0x7f020065
public const int ic_collapse_00004 = 2130837605; public const int ic_collapse_00003 = 2130837605;
// aapt resource value: 0x7f020066 // aapt resource value: 0x7f020066
public const int ic_collapse_00005 = 2130837606; public const int ic_collapse_00004 = 2130837606;
// aapt resource value: 0x7f020067 // aapt resource value: 0x7f020067
public const int ic_collapse_00006 = 2130837607; public const int ic_collapse_00005 = 2130837607;
// aapt resource value: 0x7f020068 // aapt resource value: 0x7f020068
public const int ic_collapse_00007 = 2130837608; public const int ic_collapse_00006 = 2130837608;
// aapt resource value: 0x7f020069 // aapt resource value: 0x7f020069
public const int ic_collapse_00008 = 2130837609; public const int ic_collapse_00007 = 2130837609;
// aapt resource value: 0x7f02006a // aapt resource value: 0x7f02006a
public const int ic_collapse_00009 = 2130837610; public const int ic_collapse_00008 = 2130837610;
// aapt resource value: 0x7f02006b // aapt resource value: 0x7f02006b
public const int ic_collapse_00010 = 2130837611; public const int ic_collapse_00009 = 2130837611;
// aapt resource value: 0x7f02006c // aapt resource value: 0x7f02006c
public const int ic_collapse_00011 = 2130837612; public const int ic_collapse_00010 = 2130837612;
// aapt resource value: 0x7f02006d // aapt resource value: 0x7f02006d
public const int ic_collapse_00012 = 2130837613; public const int ic_collapse_00011 = 2130837613;
// aapt resource value: 0x7f02006e // aapt resource value: 0x7f02006e
public const int ic_collapse_00013 = 2130837614; public const int ic_collapse_00012 = 2130837614;
// aapt resource value: 0x7f02006f // aapt resource value: 0x7f02006f
public const int ic_collapse_00014 = 2130837615; public const int ic_collapse_00013 = 2130837615;
// aapt resource value: 0x7f020070 // aapt resource value: 0x7f020070
public const int ic_collapse_00015 = 2130837616; public const int ic_collapse_00014 = 2130837616;
// aapt resource value: 0x7f020071 // aapt resource value: 0x7f020071
public const int ic_errorstatus = 2130837617; public const int ic_collapse_00015 = 2130837617;
// aapt resource value: 0x7f020072 // aapt resource value: 0x7f020072
public const int ic_expand = 2130837618; public const int ic_errorstatus = 2130837618;
// aapt resource value: 0x7f020073 // aapt resource value: 0x7f020073
public const int ic_expand_00000 = 2130837619; public const int ic_expand = 2130837619;
// aapt resource value: 0x7f020074 // aapt resource value: 0x7f020074
public const int ic_expand_00001 = 2130837620; public const int ic_expand_00000 = 2130837620;
// aapt resource value: 0x7f020075 // aapt resource value: 0x7f020075
public const int ic_expand_00002 = 2130837621; public const int ic_expand_00001 = 2130837621;
// aapt resource value: 0x7f020076 // aapt resource value: 0x7f020076
public const int ic_expand_00003 = 2130837622; public const int ic_expand_00002 = 2130837622;
// aapt resource value: 0x7f020077 // aapt resource value: 0x7f020077
public const int ic_expand_00004 = 2130837623; public const int ic_expand_00003 = 2130837623;
// aapt resource value: 0x7f020078 // aapt resource value: 0x7f020078
public const int ic_expand_00005 = 2130837624; public const int ic_expand_00004 = 2130837624;
// aapt resource value: 0x7f020079 // aapt resource value: 0x7f020079
public const int ic_expand_00006 = 2130837625; public const int ic_expand_00005 = 2130837625;
// aapt resource value: 0x7f02007a // aapt resource value: 0x7f02007a
public const int ic_expand_00007 = 2130837626; public const int ic_expand_00006 = 2130837626;
// aapt resource value: 0x7f02007b // aapt resource value: 0x7f02007b
public const int ic_expand_00008 = 2130837627; public const int ic_expand_00007 = 2130837627;
// aapt resource value: 0x7f02007c // aapt resource value: 0x7f02007c
public const int ic_expand_00009 = 2130837628; public const int ic_expand_00008 = 2130837628;
// aapt resource value: 0x7f02007d // aapt resource value: 0x7f02007d
public const int ic_expand_00010 = 2130837629; public const int ic_expand_00009 = 2130837629;
// aapt resource value: 0x7f02007e // aapt resource value: 0x7f02007e
public const int ic_expand_00011 = 2130837630; public const int ic_expand_00010 = 2130837630;
// aapt resource value: 0x7f02007f // aapt resource value: 0x7f02007f
public const int ic_expand_00012 = 2130837631; public const int ic_expand_00011 = 2130837631;
// aapt resource value: 0x7f020080 // aapt resource value: 0x7f020080
public const int ic_expand_00013 = 2130837632; public const int ic_expand_00012 = 2130837632;
// aapt resource value: 0x7f020081 // aapt resource value: 0x7f020081
public const int ic_expand_00014 = 2130837633; public const int ic_expand_00013 = 2130837633;
// aapt resource value: 0x7f020082 // aapt resource value: 0x7f020082
public const int ic_expand_00015 = 2130837634; public const int ic_expand_00014 = 2130837634;
// aapt resource value: 0x7f020083 // aapt resource value: 0x7f020083
public const int ic_media_pause = 2130837635; public const int ic_expand_00015 = 2130837635;
// aapt resource value: 0x7f020084 // aapt resource value: 0x7f020084
public const int ic_media_play = 2130837636; public const int ic_media_pause = 2130837636;
// aapt resource value: 0x7f020085 // aapt resource value: 0x7f020085
public const int ic_media_route_disabled_mono_dark = 2130837637; public const int ic_media_play = 2130837637;
// aapt resource value: 0x7f020086 // aapt resource value: 0x7f020086
public const int ic_media_route_off_mono_dark = 2130837638; public const int ic_media_route_disabled_mono_dark = 2130837638;
// aapt resource value: 0x7f020087 // aapt resource value: 0x7f020087
public const int ic_media_route_on_0_mono_dark = 2130837639; public const int ic_media_route_off_mono_dark = 2130837639;
// aapt resource value: 0x7f020088 // aapt resource value: 0x7f020088
public const int ic_media_route_on_1_mono_dark = 2130837640; public const int ic_media_route_on_0_mono_dark = 2130837640;
// aapt resource value: 0x7f020089 // aapt resource value: 0x7f020089
public const int ic_media_route_on_2_mono_dark = 2130837641; public const int ic_media_route_on_1_mono_dark = 2130837641;
// aapt resource value: 0x7f02008a // aapt resource value: 0x7f02008a
public const int ic_media_route_on_mono_dark = 2130837642; public const int ic_media_route_on_2_mono_dark = 2130837642;
// aapt resource value: 0x7f02008b // aapt resource value: 0x7f02008b
public const int ic_pause_dark = 2130837643; public const int ic_media_route_on_mono_dark = 2130837643;
// aapt resource value: 0x7f02008c // aapt resource value: 0x7f02008c
public const int ic_pause_light = 2130837644; public const int ic_pause_dark = 2130837644;
// aapt resource value: 0x7f02008d // aapt resource value: 0x7f02008d
public const int ic_play_dark = 2130837645; public const int ic_pause_light = 2130837645;
// aapt resource value: 0x7f02008e // aapt resource value: 0x7f02008e
public const int ic_play_light = 2130837646; public const int ic_play_dark = 2130837646;
// aapt resource value: 0x7f02008f // aapt resource value: 0x7f02008f
public const int ic_speaker_dark = 2130837647; public const int ic_play_light = 2130837647;
// aapt resource value: 0x7f020090 // aapt resource value: 0x7f020090
public const int ic_speaker_group_dark = 2130837648; public const int ic_speaker_dark = 2130837648;
// aapt resource value: 0x7f020091 // aapt resource value: 0x7f020091
public const int ic_speaker_group_light = 2130837649; public const int ic_speaker_group_dark = 2130837649;
// aapt resource value: 0x7f020092 // aapt resource value: 0x7f020092
public const int ic_speaker_light = 2130837650; public const int ic_speaker_group_light = 2130837650;
// aapt resource value: 0x7f020093 // aapt resource value: 0x7f020093
public const int ic_successstatus = 2130837651; public const int ic_speaker_light = 2130837651;
// aapt resource value: 0x7f020094 // aapt resource value: 0x7f020094
public const int ic_tv_dark = 2130837652; public const int ic_successstatus = 2130837652;
// aapt resource value: 0x7f020095 // aapt resource value: 0x7f020095
public const int ic_tv_light = 2130837653; public const int ic_tv_dark = 2130837653;
// aapt resource value: 0x7f020096 // aapt resource value: 0x7f020096
public const int icon = 2130837654; public const int ic_tv_light = 2130837654;
// aapt resource value: 0x7f020097 // aapt resource value: 0x7f020097
public const int menu_cart = 2130837655; public const int icon = 2130837655;
// aapt resource value: 0x7f020098 // aapt resource value: 0x7f020098
public const int menu_filter = 2130837656; public const int menu_cart = 2130837656;
// aapt resource value: 0x7f020099 // aapt resource value: 0x7f020099
public const int menu_profile = 2130837657; public const int menu_filter = 2130837657;
// aapt resource value: 0x7f02009a // aapt resource value: 0x7f02009a
public const int mr_dialog_material_background_dark = 2130837658; public const int menu_profile = 2130837658;
// aapt resource value: 0x7f02009b // aapt resource value: 0x7f02009b
public const int mr_dialog_material_background_light = 2130837659; public const int mr_dialog_material_background_dark = 2130837659;
// aapt resource value: 0x7f02009c // aapt resource value: 0x7f02009c
public const int mr_ic_audiotrack_light = 2130837660; public const int mr_dialog_material_background_light = 2130837660;
// aapt resource value: 0x7f02009d // aapt resource value: 0x7f02009d
public const int mr_ic_cast_dark = 2130837661; public const int mr_ic_audiotrack_light = 2130837661;
// aapt resource value: 0x7f02009e // aapt resource value: 0x7f02009e
public const int mr_ic_cast_light = 2130837662; public const int mr_ic_cast_dark = 2130837662;
// aapt resource value: 0x7f02009f // aapt resource value: 0x7f02009f
public const int mr_ic_close_dark = 2130837663; public const int mr_ic_cast_light = 2130837663;
// aapt resource value: 0x7f0200a0 // aapt resource value: 0x7f0200a0
public const int mr_ic_close_light = 2130837664; public const int mr_ic_close_dark = 2130837664;
// aapt resource value: 0x7f0200a1 // aapt resource value: 0x7f0200a1
public const int mr_ic_media_route_connecting_mono_dark = 2130837665; public const int mr_ic_close_light = 2130837665;
// aapt resource value: 0x7f0200a2 // aapt resource value: 0x7f0200a2
public const int mr_ic_media_route_connecting_mono_light = 2130837666; public const int mr_ic_media_route_connecting_mono_dark = 2130837666;
// aapt resource value: 0x7f0200a3 // aapt resource value: 0x7f0200a3
public const int mr_ic_media_route_mono_dark = 2130837667; public const int mr_ic_media_route_connecting_mono_light = 2130837667;
// aapt resource value: 0x7f0200a4 // aapt resource value: 0x7f0200a4
public const int mr_ic_media_route_mono_light = 2130837668; public const int mr_ic_media_route_mono_dark = 2130837668;
// aapt resource value: 0x7f0200a5 // aapt resource value: 0x7f0200a5
public const int mr_ic_pause_dark = 2130837669; public const int mr_ic_media_route_mono_light = 2130837669;
// aapt resource value: 0x7f0200a6 // aapt resource value: 0x7f0200a6
public const int mr_ic_pause_light = 2130837670; public const int mr_ic_pause_dark = 2130837670;
// aapt resource value: 0x7f0200a7 // aapt resource value: 0x7f0200a7
public const int mr_ic_play_dark = 2130837671; public const int mr_ic_pause_light = 2130837671;
// aapt resource value: 0x7f0200a8 // aapt resource value: 0x7f0200a8
public const int mr_ic_play_light = 2130837672; public const int mr_ic_play_dark = 2130837672;
// aapt resource value: 0x7f0200ae
public const int notification_template_icon_bg = 2130837678;
// aapt resource value: 0x7f0200a9 // aapt resource value: 0x7f0200a9
public const int product_add = 2130837673; public const int mr_ic_play_light = 2130837673;
// aapt resource value: 0x7f0200af
public const int notification_template_icon_bg = 2130837679;
// aapt resource value: 0x7f0200aa // aapt resource value: 0x7f0200aa
public const int roundedbg = 2130837674; public const int product_add = 2130837674;
// aapt resource value: 0x7f0200ab // aapt resource value: 0x7f0200ab
public const int roundedbgdark = 2130837675; public const int roundedbg = 2130837675;
// aapt resource value: 0x7f0200ac // aapt resource value: 0x7f0200ac
public const int splash_drawable = 2130837676; public const int roundedbgdark = 2130837676;
// aapt resource value: 0x7f0200ad // aapt resource value: 0x7f0200ad
public const int user_profile = 2130837677; public const int splash_drawable = 2130837677;
// aapt resource value: 0x7f0200ae
public const int user_profile = 2130837678;
static Drawable() static Drawable()
{ {
@ -2522,6 +2525,9 @@ namespace eShopOnContainers.Droid
// aapt resource value: 0x7f070098 // aapt resource value: 0x7f070098
public const int line3 = 2131165336; public const int line3 = 2131165336;
// aapt resource value: 0x7f07009c
public const int linearLayout_Home = 2131165340;
// aapt resource value: 0x7f07000b // aapt resource value: 0x7f07000b
public const int listMode = 2131165195; public const int listMode = 2131165195;
@ -2717,8 +2723,8 @@ namespace eShopOnContainers.Droid
// aapt resource value: 0x7f070013 // aapt resource value: 0x7f070013
public const int showTitle = 2131165203; public const int showTitle = 2131165203;
// aapt resource value: 0x7f07009d // aapt resource value: 0x7f07009f
public const int sliding_tabs = 2131165341; public const int sliding_tabs = 2131165343;
// aapt resource value: 0x7f07006c // aapt resource value: 0x7f07006c
public const int snackbar_action = 2131165292; public const int snackbar_action = 2131165292;
@ -2756,8 +2762,11 @@ namespace eShopOnContainers.Droid
// aapt resource value: 0x7f07000d // aapt resource value: 0x7f07000d
public const int tabMode = 2131165197; public const int tabMode = 2131165197;
// aapt resource value: 0x7f07009c // aapt resource value: 0x7f07009d
public const int tab_icon = 2131165340; public const int tab_icon = 2131165341;
// aapt resource value: 0x7f07009e
public const int tab_layout_textview = 2131165342;
// aapt resource value: 0x7f070099 // aapt resource value: 0x7f070099
public const int text = 2131165337; public const int text = 2131165337;
@ -2780,8 +2789,8 @@ namespace eShopOnContainers.Droid
// aapt resource value: 0x7f070048 // aapt resource value: 0x7f070048
public const int title_template = 2131165256; public const int title_template = 2131165256;
// aapt resource value: 0x7f07009e // aapt resource value: 0x7f0700a0
public const int toolbar = 2131165342; public const int toolbar = 2131165344;
// aapt resource value: 0x7f070032 // aapt resource value: 0x7f070032
public const int top = 2131165234; public const int top = 2131165234;

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,14 +1,28 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
android:layout_width="wrap_content" android:layout_weight="25"
android:layout_height="wrap_content" android:layout_width="0dp"
android:gravity="center">
<ImageView
android:id="@+id/tab_icon"
android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:scaleType="center" android:id="@+id/linearLayout_Home"
android:layout_centerHorizontal="true"
android:background="@android:color/transparent" /> android:weightSum="100"
</RelativeLayout> android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true">
<ImageView
android:src="@drawable/icon"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="70"
android:id="@+id/tab_icon"
android:scaleType="fitCenter"
android:adjustViewBounds="false" />
<TextView
android:gravity="center_horizontal"
android:text="Home"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30"
android:id="@+id/tab_layout_textview" />
</LinearLayout>

View File

@ -21,8 +21,8 @@
<!-- You can also set colorControlNormal, colorControlActivated <!-- You can also set colorControlNormal, colorControlActivated
colorControlHighlight and colorSwitchThumbNormal. --> colorControlHighlight and colorSwitchThumbNormal. -->
<item name="windowActionModeOverlay">true</item> <item name="windowActionModeOverlay">true</item>
<item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item> <item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item>
<item name="android:windowBackground">@drawable/background</item>
</style> </style>
<style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar"> <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">

View File

@ -1,18 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<runtime> <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.ObjectModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" /> <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" /> <assemblyIdentity name="System.ObjectModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0"/>
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0"/>
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@ -307,6 +307,21 @@
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable-xxxhdpi\menu_cart.png" /> <AndroidResource Include="Resources\drawable-xxxhdpi\menu_cart.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxxhdpi\icon.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi\background.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xhdpi\background.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi\background.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxxhdpi\background.png" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<Import Project="..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" /> <Import Project="..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\..\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Support.Vector.Drawable.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">