Android xamarin替换渲染器中的新视图
您好,我正在尝试在Android中为boxview制作一个渲染器。我需要添加渲染新视图。无法显示该视图。谁能告诉我出了什么问题,解释一下它是怎么工作的 这是我的渲染器中的方法Android xamarin替换渲染器中的新视图,android,xamarin,Android,Xamarin,您好,我正在尝试在Android中为boxview制作一个渲染器。我需要添加渲染新视图。无法显示该视图。谁能告诉我出了什么问题,解释一下它是怎么工作的 这是我的渲染器中的方法 protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) { base.OnElementChanged(e); var activity = this.Context a
protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) {
base.OnElementChanged(e);
var activity = this.Context as Activity;
if (e.OldElement == null) {
// Connect the control to its renderer.
PKInputView inputView = (PKInputView)this.Element;
var viewGroup = (global::Android.Views.ViewGroup)ViewGroup;
//Creating Layout
global::Android.Widget.RelativeLayout layout = new global::Android.Widget.RelativeLayout(viewGroup.Context);
//Creating TextView
global::Android.Widget.TextView text = new global::Android.Widget.TextView(this.Context);
text.Text = "ahoj";
text.SetHeight(30);
text.SetTextColor(global::Android.Graphics.Color.Red);
//Set up layers
layout.AddView(text);
viewGroup.AddView(layout);
}
protected override void OnElementChanged(ElementChangedEventArgs e){
基础。一个要素发生变化(e);
var activity=this.Context作为活动;
if(e.OldElement==null){
//将控件连接到其渲染器。
PKInputView inputView=(PKInputView)this.Element;
var viewGroup=(global::Android.Views.viewGroup)viewGroup;
//创建布局
global::Android.Widget.RelativeLayout布局=新的global::Android.Widget.RelativeLayout(viewGroup.Context);
//创建文本视图
global::Android.Widget.TextView text=新的global::Android.Widget.TextView(this.Context);
text.text=“ahoj”;
文本设置高度(30);
text.SetTextColor(全局::Android.Graphics.Color.Red);
//设置图层
布局。添加视图(文本);
添加视图(布局);
}
将e.OldElement替换为此控件:
if (this.Control == null) {
删除此项,因为它将引发异常(除非BoxView继承自PKInputView):
然后在if语句范围的末尾设置本机视图:
this.SetNativeControl(viewGroup);
}
我假设渲染器看起来像这样:
public class BoxViewRenderer : ViewRenderer<BoxView, global::Android.Views.ViewGroup>
public类BoxViewRenderer:ViewRenderer
我必须包括全班,因为你的建议不起作用
[assembly: ExportRenderer(typeof(PKInputView), typeof(PKInputViewRenderer))]
namespace takeapayment.Droid.Renderers {
public class PKInputViewRenderer : BoxRenderer, CCDataSource {
/*
//header
private global::Android.Widget.AbsoluteLayout header = Android.Widget.AbsoluteLayout();
private TextView title = new TextView();
private global::Android.Widget.Button saveButton = new Button();
*/
protected void OnCreate(Bundle savedInstanceState) {
this.OnCreate(savedInstanceState);
}
protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) {
base.OnElementChanged(e);
var activity = this.Context as Activity;
if (e.OldElement == null) {
// Connect the control to its renderer.
PKInputView inputView = (PKInputView)this.Element;
var viewGroup = (global::Android.Views.ViewGroup)ViewGroup;
//Creating Layout
global::Android.Widget.RelativeLayout layout = new global::Android.Widget.RelativeLayout(viewGroup.Context);
//Creating TextView
global::Android.Widget.TextView text = new global::Android.Widget.TextView(this.Context);
text.Text = "ahoj";
text.SetHeight(30);
text.SetTextColor(global::Android.Graphics.Color.Red);
//Set up layers
layout.AddView(text);
viewGroup.AddView(layout);
}
}
[程序集:ExportRenderer(typeof(PKInputView)、typeof(PKInputViewRenderer))]
命名空间takeapayment.Droid.Renderers{
公共类PKInputViewRenderer:BoxRenderer,CCDataSource{
/*
//标题
私有全局::Android.Widget.AbsoluteLayout标头=Android.Widget.AbsoluteLayout();
私有文本视图标题=新建文本视图();
私有全局::Android.Widget.Button saveButton=new Button();
*/
创建时受保护的void(Bundle savedInstanceState){
this.OnCreate(savedInstanceState);
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e){
基础。一个要素发生变化(e);
var activity=this.Context作为活动;
if(e.OldElement==null){
//将控件连接到其渲染器。
PKInputView inputView=(PKInputView)this.Element;
var viewGroup=(global::Android.Views.viewGroup)viewGroup;
//创建布局
global::Android.Widget.RelativeLayout布局=新的global::Android.Widget.RelativeLayout(viewGroup.Context);
//创建文本视图
global::Android.Widget.TextView text=新的global::Android.Widget.TextView(this.Context);
text.text=“ahoj”;
文本设置高度(30);
text.SetTextColor(全局::Android.Graphics.Color.Red);
//设置图层
布局。添加视图(文本);
添加视图(布局);
}
}
}如果要替换控件,应从viewrenderer派生渲染器。 试试这些代码。还有这个vdo
[程序集:ExportRenderer(typeof(PKInputView)、typeof(PKInputViewRenderer))]
公共类PKInputViewRenderer:ViewRenderer,CCDataSource
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
//将控件连接到其渲染器。
PKInputView inputView=e.NewElement??e.OldElement;;
//创建文本视图
global::Android.Widget.TextView text=新的global::Android.Widget.TextView(this.Context);
text.text=“ahoj”;
文本设置高度(30);
text.SetTextColor(全局::Android.Graphics.Color.Red);
SetNativeControl(文本);
}
}
此vdo将显示自定义渲染器的所有方面。
[assembly: ExportRenderer(typeof(PKInputView), typeof(PKInputViewRenderer))]
namespace takeapayment.Droid.Renderers {
public class PKInputViewRenderer : BoxRenderer, CCDataSource {
/*
//header
private global::Android.Widget.AbsoluteLayout header = Android.Widget.AbsoluteLayout();
private TextView title = new TextView();
private global::Android.Widget.Button saveButton = new Button();
*/
protected void OnCreate(Bundle savedInstanceState) {
this.OnCreate(savedInstanceState);
}
protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) {
base.OnElementChanged(e);
var activity = this.Context as Activity;
if (e.OldElement == null) {
// Connect the control to its renderer.
PKInputView inputView = (PKInputView)this.Element;
var viewGroup = (global::Android.Views.ViewGroup)ViewGroup;
//Creating Layout
global::Android.Widget.RelativeLayout layout = new global::Android.Widget.RelativeLayout(viewGroup.Context);
//Creating TextView
global::Android.Widget.TextView text = new global::Android.Widget.TextView(this.Context);
text.Text = "ahoj";
text.SetHeight(30);
text.SetTextColor(global::Android.Graphics.Color.Red);
//Set up layers
layout.AddView(text);
viewGroup.AddView(layout);
}
}