Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将XML视图与代码中创建的视图相匹配?_C#_Android_Xml_Xamarin - Fatal编程技术网

C# 如何将XML视图与代码中创建的视图相匹配?

C# 如何将XML视图与代码中创建的视图相匹配?,c#,android,xml,xamarin,C#,Android,Xml,Xamarin,我试图以编程方式创建一些视图,以匹配我在XML布局中创建的模型,但它们的显示方式不同,尽管它们似乎具有相同的属性 左边的卡片是使用下面的XML创建的,右边的卡片是使用代码创建的。正确的布局在左边,我的代码哪里错了 XML(左图) 代码(右图) var layoutParams=new LinearLayout.layoutParams(ViewGroup.layoutParams.WrapContent,ViewGroup.layoutParams.WrapContent); int ca

我试图以编程方式创建一些视图,以匹配我在XML布局中创建的模型,但它们的显示方式不同,尽管它们似乎具有相同的属性

左边的卡片是使用下面的XML创建的,右边的卡片是使用代码创建的。正确的布局在左边,我的代码哪里错了

XML(左图)


代码(右图)

var layoutParams=new LinearLayout.layoutParams(ViewGroup.layoutParams.WrapContent,ViewGroup.layoutParams.WrapContent);
int cardMinDims=(int)(200*刻度+0.5f);
TextView title=新的TextView(此);
title.Text=“测试标题”;
title.Gravity=GravityFlags.Center;
var title_layoutParams=layoutParams;
title_layoutParams.Weight=1;
title_layoutParams.Gravity=GravityFlags.Bottom;
title_layoutParams.SetMargins(5,5,5,5);
LinearLayout布局=新的LinearLayout(本);
布局。设置最小高度(cardMinDims);
布局。设置最小宽度(cardMinDims);

布局。方向=方向。垂直; layout.AddView(标题、标题和布局参数); CardView卡=新的CardView(此); card.AddView(布局、布局参数); LinearLayout cardViewContainer=FindViewById(Resource.Id.cardViewContainer); AddView(卡片、布局参数);
在代码中,您正在重新使用
布局参数
:-

i、 e

因此现在有一个来自
title\u layoutParams
object的引用,指向
layoutParams
的同一个对象引用

然后,您可以稍后使用相同的
layoutParams

由于这些是对象引用
,您所做的任何更改都将应用于所有其他变量,因为它们指向同一对象

我在代码中重新创建了演示,下面的演示与您的
axml
几乎相同,只需对
cardwiew
和内部
LinearLayout
layout\u宽度和
layout\u高度进行几次调整即可如期工作:-

我已经完成了以下演示中的任何缩放:-

示例:-

        LinearLayout objLinearLayout_CardViewContainer = new LinearLayout(this);
        objLinearLayout_CardViewContainer.Orientation = Orientation.Horizontal;
        objLinearLayout_CardViewContainer.LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, 400);

        Android.Support.V7.Widget.CardView objCardView = new CardView(this);
        objLinearLayout_CardViewContainer.AddView(objCardView, LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.MatchParent);

        LinearLayout objCardViewLinearLayout = new LinearLayout(this);
        objCardViewLinearLayout.SetMinimumWidth(400);
        objCardViewLinearLayout.SetMinimumHeight(400);
        objCardView.AddView(objCardViewLinearLayout, CardView.LayoutParams.MatchParent, CardView.LayoutParams.MatchParent);

        TextView objTextView = new TextView(this);
        objTextView.Text = "TEST TITLE";
        objTextView.SetTextColor(Color.Red);
        objTextView.Gravity = GravityFlags.Center;

        LinearLayout.LayoutParams objLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent);
        objLayoutParams.Weight = 1;
        objLayoutParams.Gravity = GravityFlags.Bottom;
        objLayoutParams.SetMargins(5, 5, 5, 5);

        objCardViewLinearLayout.AddView(objTextView, objLayoutParams);
然后,您将获得类似以下内容的输出:-


在代码中,您正在重复使用
布局参数
:-

i、 e

因此现在有一个来自
title\u layoutParams
object的引用,指向
layoutParams
的同一个对象引用

然后,您可以稍后使用相同的
layoutParams

由于这些是对象引用
,您所做的任何更改都将应用于所有其他变量,因为它们指向同一对象

我在代码中重新创建了演示,下面的演示与您的
axml
几乎相同,只需对
cardwiew
和内部
LinearLayout
layout\u宽度和
layout\u高度进行几次调整即可如期工作:-

我已经完成了以下演示中的任何缩放:-

示例:-

        LinearLayout objLinearLayout_CardViewContainer = new LinearLayout(this);
        objLinearLayout_CardViewContainer.Orientation = Orientation.Horizontal;
        objLinearLayout_CardViewContainer.LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, 400);

        Android.Support.V7.Widget.CardView objCardView = new CardView(this);
        objLinearLayout_CardViewContainer.AddView(objCardView, LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.MatchParent);

        LinearLayout objCardViewLinearLayout = new LinearLayout(this);
        objCardViewLinearLayout.SetMinimumWidth(400);
        objCardViewLinearLayout.SetMinimumHeight(400);
        objCardView.AddView(objCardViewLinearLayout, CardView.LayoutParams.MatchParent, CardView.LayoutParams.MatchParent);

        TextView objTextView = new TextView(this);
        objTextView.Text = "TEST TITLE";
        objTextView.SetTextColor(Color.Red);
        objTextView.Gravity = GravityFlags.Center;

        LinearLayout.LayoutParams objLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent);
        objLayoutParams.Weight = 1;
        objLayoutParams.Gravity = GravityFlags.Bottom;
        objLayoutParams.SetMargins(5, 5, 5, 5);

        objCardViewLinearLayout.AddView(objTextView, objLayoutParams);
然后,您将获得类似以下内容的输出:-


添加布局重力和法向重力这就是我所做的,不是吗@Madhur
title.Gravity
设置常规重力,而
title\u layoutParams.Gravity
设置布局重力?layout.Orientation=Orientation.Vertical;水平添加布局重力和法向重力这就是我所做的,不是吗@Madhur
title.Gravity
设置常规重力,而
title\u layoutParams.Gravity
设置布局重力?layout.Orientation=Orientation.Vertical;横
var layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);

var title_layoutParams = layoutParams;
        LinearLayout objLinearLayout_CardViewContainer = new LinearLayout(this);
        objLinearLayout_CardViewContainer.Orientation = Orientation.Horizontal;
        objLinearLayout_CardViewContainer.LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, 400);

        Android.Support.V7.Widget.CardView objCardView = new CardView(this);
        objLinearLayout_CardViewContainer.AddView(objCardView, LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.MatchParent);

        LinearLayout objCardViewLinearLayout = new LinearLayout(this);
        objCardViewLinearLayout.SetMinimumWidth(400);
        objCardViewLinearLayout.SetMinimumHeight(400);
        objCardView.AddView(objCardViewLinearLayout, CardView.LayoutParams.MatchParent, CardView.LayoutParams.MatchParent);

        TextView objTextView = new TextView(this);
        objTextView.Text = "TEST TITLE";
        objTextView.SetTextColor(Color.Red);
        objTextView.Gravity = GravityFlags.Center;

        LinearLayout.LayoutParams objLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent);
        objLayoutParams.Weight = 1;
        objLayoutParams.Gravity = GravityFlags.Bottom;
        objLayoutParams.SetMargins(5, 5, 5, 5);

        objCardViewLinearLayout.AddView(objTextView, objLayoutParams);