我正在使用Xamarin Monodroid将部分Windows Phone应用程序移植到Android。
我对Xamarin的东西很新,实际上只是购买了许可证。
到目前为止,在AXML中重新创建XAML UI仍然非常好,但我遇到了自定义控件的问题。
以下是自定义控件的含义:
在.NET中,我通过创建继承自'UserControl'类的类创建了一堆控件,我创建了逻辑并设置了内容。然后我用'new my_control()'等创建新实例......
我的某些控件不是以这种方式创建的,而是通过定义XAML来创建UserControl,其中没有特定的逻辑,但是当我需要组合2个或更多控件时(例如,彩色方块旁边有文本) ,所以Rectangle + TextBlock)再次我只需要做'new my_control()'并在XAML UI(Grid,ListBox,StackPanel等)中添加它。
我如何实现与Monodroid类似的东西?
提前致谢!
答案 0 :(得分:6)
您可以通过继承View类来创建自己的自定义视图。这可以让你做任何事情。然后,您可以使用以下命令在AXML中引用它:
<your.awesome.namespace.AwesomeViewName
android:id="@+id/awesomeView"
android:layout...
/>
只需确保AXML中的命名空间名称全部小写,否则它将无法获取它。
但是如果您只需要一个非常简单的AXML布局,那么您可以创建一个新的AXML文件并使用include标记将其放在那里。
有一些关于Android的布局技巧的一般信息,这些信息适用于Android的Mono:https://developer.android.com/resources/articles/layout-tricks-merge.html
答案 1 :(得分:2)
您也可以在Mono for Android中执行“自定义控件” - 一旦您编写了它们,就可以将它们包含在您的axml文件中。
我担心我手边没有任何简单的例子,但是有一个复杂的例子:
如果您在MyControl
中声明了一个类MyNamespace
并从Android View
继承了该控件,那么您可以设置自定义控件 - 包括从XML中提取属性 - 使用构造函数如:
public MyControl(Context context, IAttributeSet attrs) { /* ... */ }
并使用XML:
<mynamespace.MyControl android:layout_height='wrap_content' />
这方面的一个例子可能是来自https://github.com/Cheesebaron/MonoDroid.HorizontalPager的控制 - 可以使用xml来使用xml,如
<mynamespace.controls.HorizontalPager
android:id="@+id/MyPageHost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
答案 2 :(得分:0)
为什么它不会进入构造函数?这是我的构造函数:
protected CropImageView(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
当我给crop_image_view xml
充气时,Init方法会导致循环依赖我尝试过公开,私密但没有运气......这是我的代码:https://github.com/slown1/Xamarin.CircleImageCropper