3

我正在使用 Xamarin Monodroid 将我的一些 Windows Phone 应用程序移植到 Android。

我对 Xamarin 的东西很陌生,实际上只是买了一个许可证。

到目前为止,就在 AXML 中重新创建 XAML UI 而言非常好,但我正面临自定义控件的问题。

这就是我所说的自定义控件:

在 .NET 中,我通过创建从“UserControl”类继承的类创建了一堆控件,我创建了逻辑并设置了内容。然后我只是用'new my_control()'等创建新实例......

我的一些控件不是以这种方式创建的,而是我通过定义 XAML 创建了 UserControl,其中没有特定的逻辑,但是当我需要组合 2 个或更多控件时(例如,旁边有文本的彩色正方形,所以 Rectangle + TextBlock),我只需要再次执行“new my_control()”并将其添加到 XAML UI(网格、列表框、StackPanel 等)中的某个位置。

我怎样才能用 Monodroid 实现类似的东西?

提前致谢!

4

3 回答 3

6

您可以通过继承 View 类来制作自己的自定义视图。这使您可以做任何事情。然后你可以在你的 AXML 中引用它:

<your.awesome.namespace.AwesomeViewName
  android:id="@+id/awesomeView"
  android:layout...
  />

只要确保您在 AXML 中的命名空间名称都是小写的,否则它不会选择它。

但是,如果您只需要一个非常简单的 AXML 布局并且您会经常使用,您可以创建一个新的 AXML 文件并使用 include 标签将其放入其中。

关于 Android 的一些 Layout Tricks 有一些更一般的信息,它们也适用于 Android 的 Mono:https ://developer.android.com/resources/articles/layout-tricks-merge.html

于 2012-06-18T23:05:27.923 回答
2

您也可以在 Mono for Android 中执行“自定义控件”——一旦您编写了它们,您就可以将它们包含在您的 axml 文件中。

恐怕我手头没有任何非常简单的例子,但是有一个复杂的例子:

https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Resources/Layout/ChildPage_Twitter.axml

如果您在 Android 中声明一个类MyControlMyNamespace继承该控件,View然后您可以设置您的自定义控件 - 包括从 XML 中提取属性 - 使用如下构造函数:

public MyControl(Context context, IAttributeSet attrs) { /* ... */ }

并使用 XML,如:

<mynamespace.MyControl android:layout_height='wrap_content' />

这方面的一个例子可能是来自https://github.com/Cheesebaron/MonoDroid.Horizo​​ntalPager的控件- 它可以从 xml 使用 xml 之类的

 <mynamespace.controls.HorizontalPager
    android:id="@+id/MyPageHost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
于 2012-06-18T23:16:31.317 回答
0

为什么它不会进入构造函数?这是我的构造函数:

protected CropImageView(IntPtr javaReference, JniHandleOwnership transfer)
        : base(javaReference, transfer)
    {

    }

当我膨胀crop_image_view xml时,Init方法会导致循环依赖

我尝试过公共,私人但没有运气......这是我的代码:https ://github.com/slown1/Xamarin.CircleImageCropper

于 2014-08-15T18:08:58.367 回答