【问题标题】:Is there a way to programmatically create copies of a layout in android?有没有办法以编程方式在android中创建布局的副本?
【发布时间】:2017-07-31 16:20:57
【问题描述】:

主要目标是使用预制布局创建可编辑的单独模块,然后以编程方式将它们添加到根布局。澄清一下,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 文件中格式化它们一样。

【问题讨论】:

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


    【解决方案1】:

    假设您的主 axml 中有一个方向为 verticalLinearLayout,您希望将多个视图附加到。

    获取对该“父级”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);
    

    注意:如果您有很多这些重复元素并且您必须滚动它们(屏幕外),请考虑使用RecyclerView,它会为您省去很多关于内存管理、滚动方面的麻烦性能等... ;-)

    【讨论】:

    • 谢谢,这真的很有帮助!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多