由于Xamarin.Forms中是对官方控件的封装,其实开发过Xamarin.Android的都会知道基础与AppCompat的外观界面是相差很大的,使用方式上也有很多不同,而Forms内部的封装不会对每个都有具体的说明,特别是那些Android平台上面没有的控件,这里需要仔细的记录一下:
1.Frame
Frame在非AppCompat中,官方的渲染方式是通用Canvas画出一个圆角的矩形,对,就是这个简单,但是你升级AppCompat后发现,我艹,边框咋没有了,更别谈边框颜色了
盗图了:
new Frame {Padding = new Thickness(10), Content = iIconImage, HasShadow = false, BackgroundColor = Color.Transparent, OutlineColor = Color.Transparent};
可以看到,即时将Frame的HasShaow=false,也会有阴影的
原因在于:
Yes in AppCompat frame is mapped to the Card control on Android. This is a bit of a breaking change when porting and you must be aware of it.
没错,AppCompat官方的使用了CardView来替代前面的方式
public class FrameRenderer : CardView, IVisualElementRenderer, IRegisterable, IDisposable
2.ActionBar
FormsAppCompatActivity里面已经封装了Toolbar,android里面使用v7包是可以继续使用ActionBar,但是Forms封装的必须使用'Theme.AppCompat.Light.NoActionBar',必须设置NoActionBar,否则会报错
3.Page的生命周期
这是很奇怪的问题,在原生界面,如果调用相机拍照 调用图库返回是不会触发OnViewAppearing的,但是在V7中会是Page触发该事件