有没有办法以编程方式在Android中创建布局的副本?

时间:2017-07-31 16:20:58

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

主要目标是使用预先制作的布局来创建可以编辑的单独模块,然后以编程方式将它们添加到根布局。为了澄清,several modules stuck together would look like this.我想动态创建每个可点击的块,其中包含名称,日期和字母。每个块的.axml代码如下:

        <RelativeLayout
            android:minWidth="25px"
            android:minHeight="25px"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/borderLayout"
            android:background="@drawable/line"
            android:paddingBottom="1dp"
            android:paddingTop="1dp">
            <RelativeLayout
                android:id="@+id/relativeLayout1"
                android:padding="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:background="#ff2f2f2f">
                <TextView
                    android:text="C"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/textView1"
                    android:layout_alignParentLeft="true"
                    android:textSize="30dp" />
                <TextView
                    android:text="Washington"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_toRightOf="@id/textView1"
                    android:id="@+id/textView2"
                    android:layout_alignParentRight="true"
                    android:gravity="right" />
                <TextView
                    android:text="6-8-17"
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/textView2"
                    android:id="@+id/textView3"
                    android:gravity="right"
                    android:layout_alignParentRight="true" />
            </RelativeLayout>
        </RelativeLayout>

我遇到的主要问题是以与我在.axml文件中格式化它们相同的方式以编程方式格式化视图。

2 个答案:

答案 0 :(得分:2)

使用inflater从资源创建视图。然后你可以以编程方式添加它

context.LayoutInflater.Inflate(Resource.Layout.oneimg_twolbl, null);

答案 1 :(得分:1)

假设您的主轴上有一个LinearLayout方向vertical,您希望将多个视图附加到。{/ p>

获取对该“父”LinearLayout的引用:

var linearLayoutParent = FindViewById<LinearLayout>(Resource.Id.linearLayout1);

然后在某个循环中,使用LayoutInflater.Inflate来扩充您的重复布局,使用您需要更新的每个元素的FindViewById返回的视图和View,然后添加该视图到索引增加的父视图:

index++;
var view = LayoutInflater.Inflate(Resource.Layout.RepeatingLayout, linearLayoutParent, false);
var letter = view.FindViewById<TextView>(Resource.Id.textView1);
letter.Text = index.ToString();
// FindViewById for textView2, textView3 and assign the text on each....
linearLayoutParent.AddView(view, index);

enter image description here

注意:如果你有很多这些重复元素并且你必须滚动它们(在屏幕外),看看使用RecyclerView代替它,它将为你节省很多令人头疼的内存管理,滚动表演等...; - )