动态加载xml控件并共享UI控件

时间:2018-07-01 18:41:20

标签: xamarin xamarin.android

我是xamarin的新手。是否可以在xml文件中加载共享的UI控件,如果可以,如何?我愿意接受更好的主意。

以下是通过include进行的静态加载,其中parent.axml是静态加载child.xml

 <include
            android:id="@+id/child"
            layout="@layout/child"
            android:layout_below="@id/toolbar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

parent.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar"
         android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <include
        android:id="@+id/child"
        layout="@layout/child"
        android:layout_below="@id/toolbar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/parent_layout"
        android:layout_below="@id/child">
        <TextView
            android:id="@+id/parent_text"
            android:layout_margin="16dp"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Click to go to the moon!"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:singleLine="true" />
    </LinearLayout>
</LinearLayout>

Child.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"> 
    <TextView
        android:id="@+id/child_text"
        android:layout_margin="16dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="You made it!"
        android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>

这个想法是它可以实现UI控件的共享。在这种情况下,parent.axml根据条件将child.xml加载到其占位符中。

1 个答案:

答案 0 :(得分:1)

您可以使用LayoutInflater来放大版式并将其自动附加到父级(或不自动):

var linearLayout = LayoutInflater.Inflate(Resource.Layout.Child, parent, true);
var textView = linearLayout.FindViewById<TextView>(Resource.Id.child_text);
textView.Text = "Inflated and attached to Parent";

另外,根据您的用例,使用独立的Fragment并将其添加到您的“父母”可能是更好的解决方案。