2017-10-13 78 views
0

目前,我們在Xamarin NativeUI(共享代碼和Xamarin.Android,Xamarin.UWP等)設計的應用程序是在這個過程中決定是否Xamain.Forms足夠成熟過渡到。Xamarin形式與原生的Android工具欄

我的一個核心問題是,我們有一個非常自定義的操作欄/工具欄,它利用Android內置的自動移動項目的處理,基於屏幕大小溢出,具有溢出菜單和子菜單,自定義控件代替圖標+文本。

我設法得到自定義控件和硬編碼溢出項。但我不確定是否有可能沒有本地化。如果我們確實需要本地化,我不知道你將如何使用Xamarin.Forms,然後有一個Xamarin.Android ActionBar。

另一個有趣的thinig添加到方程的是,我們必須支持Android 4.3這樣就意味着使用支持庫動作條。

道歉,問題是有點雜亂的,但可以分爲2個細節:可以將項目移動到或從工具欄溢出自動基於在類似的方式到Android可用屏幕大小隨着Xamarin.Forms

1)本地工具欄?

2)如果使用Xamarin.Forms,你可以使用Xamarin.Android中定義的工具欄嗎?怎麼樣?

回答

1

這應該可以在Xamarin Forms中使用自定義渲染器。

你已經領先一步,理解你想要做什麼以及如何在Xamarin Native中做到這一點。

Here is an overview on custom renderers

Here is a link到Android的一個非常基本的導航頁面自定義呈現。您應該能夠擴展它以包含您所需的原生Android代碼。

要知道,你可能需要重寫NavigationPageRenderer如果您使用的應用程序兼容性,以支持早期版本的Android。

+0

謝謝,聽起來像它可能能夠做我們需要的。 – KrustyGString

1

除了@Steve Chadbourne的回答,知道您在XF項目的PCL中使用的頁面控件真的很重要,如果您在客戶端Android項目中打開MainActivity.cs文件,您可以在默認情況下找到這樣的代碼:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     TabLayoutResource = Resource.Layout.Tabbar; 
     ToolbarResource = Resource.Layout.Toolbar; 

     base.OnCreate(bundle); 

     global::Xamarin.Forms.Forms.Init(this, bundle); 
     LoadApplication(new App()); 
    } 
} 

正如你所看到的,有被定義Toolbar,你可以找到在Resources/layout文件夾中的客戶端Android項目:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

Toolbar在XF的某些頁面類型控制中默認使用,例如NavigationPage

對於XF的本地控制,我認爲這是可能的,你沒注意到Xamarin.Forms.ToolbarItem。它也呈現爲Toolbar,您可以將Order屬性設置爲ToolbarItem以指定要在主要,輔助或默認工具欄表面上顯示的項目。

對於自定義渲染器,這是可能的,你可以參考這篇博客:Xamarin Forms - ContentPage with SearchBar in the Navigation bar

不知道哪個是你最好的選擇,但我想解釋你的兩個問題。 XF就像一個UI工具箱,它所有的控件都是基於本地SDK創建的,意味着所有的控件都被渲染爲一個匹配的本地控件,因此它可以在本地平臺中使用。因此,如果在Android平臺上將XF控件呈現爲Toolbar,那麼行爲應該與原生Android中的正常Toolbar相同,如我們自定義渲染器,創建XF控件時,許多屬性在其代碼中硬編碼,這可能會影響結果。如果你遇到這樣的問題,我建議閱讀Github上的開源文章。

對於你最後一個問題:

如果使用Xamarin.Forms您可以使用Xamarin.Android定義工具欄?怎麼樣?

您可以使用自定義渲染器或直接修改本機客戶端Android項目中的Toolbar.axml中的代碼。

+0

非常有用的信息,謝謝。我已經爲XF工具欄創建了原型,但它無法執行嵌套列表以及本機Android工具欄可以執行的一些其他操作,因此我很好奇如何恢復爲原生的缺失功能。 – KrustyGString

相關問題