簡體   English   中英

Xamarin Monodroid:WP7 => Android和自定義控制?

[英]Xamarin Monodroid: WP7 => Android and Custom Control?

我正在使用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實現類似的東西?

提前致謝!

您可以通過繼承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

您也可以在Mono for Android中執行“自定義控件” - 一旦您編寫了它們,就可以將它們包含在您的axml文件中。

我擔心我手邊沒有任何簡單的例子,但有一個復雜的例子:

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

如果在MyNamespace聲明一個類MyControl並從Android 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"
    />

有什么理由不進入構造函數? 這是我的構造函數:

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

    }

當我給crop_image_view xml充氣時,Init方法會導致循環依賴

我試過公共,私有但沒有運氣......這是我的代碼: https//github.com/slown1/Xamarin.CircleImageCropper

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM