Dynamically load xml control and share UI control

孤街醉人 提交于 2019-12-25 01:35:52

问题


I am new to xamarin. Is it possible to load a shared UI control in an xml file, if yes, how? I am open to better idea.

Below is a static loading via include, where parent.axml statically load 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>

The idea is that it can achieve share of UI controls. In this case, parent.axml loads child.xml into its place holder based on condition.


回答1:


You can use LayoutInflater to inflate layouts and auto-attach them to the parent (or not):

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";

Also depending upon your use-case, using a self-contained Fragment and adding that to your "parent" might be better a better solution.



来源:https://stackoverflow.com/questions/51126006/dynamically-load-xml-control-and-share-ui-control

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!