【问题标题】:Dynamically load xml control and share UI control动态加载xml控件并共享UI控件
【发布时间】:2018-07-02 03:10:29
【问题描述】:

我是 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" />

父.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 加载到其占位符中。

【问题讨论】:

    标签: xamarin xamarin.android


    【解决方案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 并将其添加到您的“父级”可能是更好的解决方案。

    【讨论】:

    • 使用您的第一个建议时,父母和孩子的 xml 是什么样的?因为 parent.axml 应该为任何 xml 指定占位符的位置,而不是静态指定 child.xml。
    • 您对使用 Fragment 和 Activity 的第二个建议是什么?
    • @Pingpong parent 在我的示例中是您要附加膨胀布局的位置,这通常是ViewGroup,即。一个 xxxxxLayout 容器。是的,对于在多个 Activity 或在一个 Activity 中重复的那些项目,请使用包含 Fragments 的 Activity。
    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多