UserControls - 如何在Android中执行此操作?
我在这里提到的一些问题与我在Android中创建“用户控件”的困难有关,即可定义其布局以及逻辑/代码的可重用组件,可以放在应用程序的任何地方我需要它。
我希望能够:
例如,我创建了一个MyUserControl实例。有了它我可以将它放在PopupWindow中并显示它,或者在Dialog / AlertDialog中使用它或在某个地方的布局中使用它。在所有情况下,我都可以访问对象(myUserControl),所以我可以做东西(myUserControl.SetObject(MyObject o)或其他东西)。
简而言之:.NET具有我正在寻找的概念,其模块化的“UserControl”是一个独立的组件,其中包含布局和代码(确保布局xml是一个单独的文件,但那是好)。这有很好的理由,因为我真的很讨厌“代码重复”。我想要一个可以在所有地方使用的代码/组件。
这可行吗?我现在已经有一段时间了。
答案 0 :(得分:1)
1-为您的组件制作新的xml文件。例如:MyUserControl.xml - 在此文件中,根据需要制作您的组件。示例:linearLyout有两个按钮。
2-为您的组件创建新类,并从xml文件的根视图扩展它。示例:从LinearLayout扩展。
3 - 将此构造函数添加到您的类
public ClassName(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.yourXmlFile, this);
}
public ClassName(Context context) {
super(context);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.yourXmlFile, this);
}
答案 1 :(得分:-1)
我知道这是一个旧的,但这可能有助于任何人寻找XAMARIN解决方案/回答这个通用问题 -
https://matthewwaring.wordpress.com/2015/02/10/compound-controls-views-with-xamarin-android/
这篇文章以.net的方式展示了代码背后和AXML的分离以及在代码中使用它的各种方法,这里有一个片段,它使用代码隐藏,AXML用于实际的用户控制以及如何将用户控件包含在代码中。父AXML。
“UserControl”的XAML代码 -
<?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"
android:id="@+id/compoundaxmlview_outerlayout">
<TextView
android:layout_width="fill_parent"
android:layout_height="50dp"
android:text="TextView 1"
android:id="@+id/compoundaxmlview_textview" />
<Button
android:layout_width="fill_parent"
android:layout_height="50dp"
android:text="Button 1"
android:id="@+id/compoundaxmlview_button" />
</LinearLayout>
后面的代码将此布局加载到控件中并对其进行操作 -
namespace CompoundCustomControlView
{
public class CompoundAXMLView : LinearLayout
{
// ...
void Initialize ()
{
SetBackgroundColor (new Android.Graphics.Color (100, 100, 100));
Inflate (Context, Resource.Layout.CompoundAXMLViewLayout, this);
var b1 = FindViewById<Button> (Resource.Id.compoundaxmlview_button);
var tv1 = FindViewById<TextView> (Resource.Id.compoundaxmlview_textview);
tv1.Text = "Text2";
b1.Text = "Button2";
var layout = FindViewById<LinearLayout> (Resource.Id.compoundaxmlview_outerlayout);
TextView tv = new TextView (Context);
tv.Text = "Text2.1";
Button b = new Button (Context);
b.Text = "Button2.1";
// Add inside our layout
layout.AddView (tv);
layout.AddView (b);
}
}
}
将代码包含在父视图中的代码 -
<?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">
<compoundcustomcontrolview.CompoundAXMLView
android:layout_width="fill_parent"
android:layout_height="200dp"
android:id="@+id/compound2" />
</LinearLayout>