将LinearLayout添加到现有XML

时间:2017-07-06 07:29:35

标签: c# android xamarin.android visual-studio-2017

我在这里搜索了一些帖子,想要完成我想要完成的任务,但我找不到能够适应我目的的答案。 (作为C#编程的新手,我假设我使用的C#版本有点非常新,并对语法施加了许多严格限制。但我的问题不在于此...)

我要做的是以编程方式添加到XML布局。

这是我的XML:

                <LinearLayout
                    android:id="@+id/daterow"
                    android:orientation="horizontal"
                    android:layout_width="480dp"
                    android:layout_height="40dp"
                    android:background="@drawable/customborder"
                    android:padding="0dp">
                <!--                        <LinearLayout
                        android:id="@+id/ll_001"
                        android:orientation="horizontal"
                        android:layout_width="20dp"
                        android:layout_height="40dp"
                        android:background="@drawable/customborder">
                        <TextView
                            android:id="@+id/Slot_001"
                            android:text="00:00"
                            android:textSize="8dp"
                            android:layout_width="20dp"
                            android:layout_height="40dp"
                            android:rotation="270"
                            android:gravity="left|center"
                            android:singleLine="true"
                            android:maxLines="1" />
                    </LinearLayout> -->

我的代码段如下:

            LinearLayout parentLayout = (LinearLayout)FindViewById(Resource.Id.daterow);
            LinearLayout Linear1 = new LinearLayout(this);
            Linear1.LayoutParameters = new LayoutParams(LayoutParams.MatchParent,LayoutParams.WrapContent);
            parentLayout.AddView(Linear1);


            TextView tv = new TextView(this);

            tv.Id = i;  // i is variable in a for loop inside of which this code is.
            int qq;   //THIS LINE FOR TESTING ONLY.
            qq = 333;  //THIS LINE FOR TESTING ONLY.
            this.tv.SetText(DateTime.Now.AddMinutes(this.iSlot).ToString("HH:mm"));  //THIS IS WHAT I WANT TO ACCOMPLISH EVENTUALLY
            tv.SetText(qq);  //THIS LINE FOR TESTING ONLY. **GIVES ERROR**
            ll2.AddView(tv);  //THIS LINE FOR TESTING ONLY.

最终,我想以编程方式实现XML,如“这是我的XML”一节所示。

Visual Studio不会突出显示上述语法中的任何错误。但在运行时 - 我收到以下错误:

未处理的例外:

Android.Content.Res.Resources + NotFoundException:字符串资源ID#0x14d

有人可以告诉我我犯了什么错误吗?

在您的回复中,您还可以包括哪些“使用”我应该使用您在解决方案中建议的功能 - 因为我是C#的新手。

2 个答案:

答案 0 :(得分:0)

  

将LinearLayout添加到现有XML

 LinearLayout parentLayout = (LinearLayout)FindViewById(Resource.Id.daterow);

 //using Android.Widget;
 Android.Widget.LinearLayout Linear1 = new Android.Widget.LinearLayout(this);

 //using Android.Views.ViewGroup;
 Linear1.LayoutParameters = new Android.Views.ViewGroup.LayoutParams(Android.Views.ViewGroup.LayoutParams.MatchParent, Android.Views.ViewGroup.LayoutParams.WrapContent);
 parentLayout.AddView(Linear1);

 Android.Widget.TextView tv = new Android.Widget.TextView(this);
 tv.Text = DateTime.Now.AddMinutes(1.1).ToString("HH:mm");//THIS IS WHAT I WANT TO ACCOMPLISH EVENTUALLY
 Linear1.AddView(tv);  //THIS LINE FOR TESTING ONLY.
  

Android.Content.Res.Resources + NotFoundException:字符串资源ID#0x21

当您使用tv.SetText(qq)方法时会发生这种情况,如果您只想为TextView设置文字,则可以使用tv.Text = qq.ToString()

  

this.tv.SetText(DateTime.Now.AddMinutes(this.iSlot)的ToString( “HH:MM”)); //这就是我想要实现的目标

像这样修改你的代码就可以达到效果:

tv.Text = DateTime.Now.AddMinutes(1.1).ToString("HH:mm");

效果

enter image description here

答案 1 :(得分:0)

感谢York Shen,我能够提出一些我使用的基本原则 - 总结如下:

  1. 首先将焦点设置到您想要添加另一个线性布局的现有轴线LinearLayout。我使用LinearLayout dtlr = (LinearLayout)FindViewById(Resource.Id.datetimelogorow);我的axml文件中有一个名为datetimelogorow的LinearLayout。

  2. 接下来定义您的新线性布局:Android.Widget.LinearLayout dtr = new Android.Widget.LinearLayout(this);

  3. 根据需要更改所有参数,例如方向,背景等(例如)dtr.Orientation = Orientation.Horizontal;

  4. 现在创建您的LinearLayout dtlr.AddView(dtr);

  5. LinearLayout下的文本视图也可以像步骤2中那样添加,将“LinearLayout”替换为该行中的“TextView”。

  6. 希望这有帮助。

    再次感谢York Shen。

    乌塔姆