2017-10-13 7 views
0

Wir haben derzeit eine App entwickelt in Xamarin NativeUI (shared Code und Xamarin.Android, Xamarin.UWP etc) sind in dem Prozess darüber zu entscheiden, ob Xamain.Forms reif genug ist, um zu übergehen.Xamarin Forms mit nativer Android Toolbar

Eines meiner wichtigsten Anliegen ist, dass wir eine sehr benutzerdefinierte Aktionsleiste/Symbolleiste haben, die von Android eingebaute Handhabung von automatisch bewegten Objekten auf Überlauf basierend auf Bildschirmgröße, Überlauf-Menüs und Untermenüs, benutzerdefinierte Steuerelemente anstelle von Symbolen verwendet Text.

Ich habe es geschafft, benutzerdefinierte Steuerelemente und hardcoded Überlaufelemente zu erhalten. Aber ich bin mir nicht sicher, ob der Rest möglich ist, ohne nativ zu werden. Und wenn wir nativ werden müssen, bin ich mir nicht sicher, wie du dann Xamarin.Forms nutzen würdest und dann eine Xamarin.Android ActionBar hast.

Ein weiterer Spaß zu der Gleichung hinzufügen ist, dass wir Android 4.3 unterstützen müssen, so dass die Verwendung der Unterstützungsbibliothek actionbar bedeutet.

Apologies, die Frage ist ein weitläufiges Bit kann aber in zwei Besonderheiten gebrochen werden:

1) Mit Xamarin.Forms können Elemente zu oder von Überlauf in Symbolleiste bewegen sich automatisch basierend auf Bildschirmgröße in ähnlicher Weise auf Android native Symbolleiste?

2) Wenn Sie Xamarin.Forms verwenden, können Sie eine in Xamarin.Android definierte Symbolleiste verwenden? Wie?

Antwort

1

Dies sollte in Xamarin Forms mit einem benutzerdefinierten Renderer möglich sein.

Sie sind einen Schritt voraus, indem Sie verstehen, was Sie tun möchten und wie Sie es in Xamarin Native tun.

Here is an overview on custom renderers.

Here is a link zu einer sehr einfachen Navigationsseite benutzerdefinierte Renderer für Android. Sie sollten es in der Lage sein, den nativen Android-Code zu erweitern, den Sie benötigen.

Beachten Sie, dass Sie NavigationPageRenderer wahrscheinlich überschreiben müssen, wenn Sie App Compat zur Unterstützung früherer Versionen von Android verwenden.

+0

Danke, klingt, als könnte es tun, was wir brauchen. – KrustyGString

1

Zusätzlich zu @Steve Chadbourne Antwort ist es wirklich wichtig zu wissen, welche Seitensteuerung Sie in PCL Ihres XF-Projekts verwenden, wenn Sie die MainActivity.cs Datei im Client-Android-Projekt öffnen, können Sie standardmäßig finden, dass Codes wie folgt :

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()); 
    } 
} 

Wie Sie sehen können, ist Toolbar definiert, die Sie im Resources/layout Ordner im Client Android-Projekt finden Sie unter:

<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" /> 

DieseStandardmäßig wird 0 innerhalb eines Seitentypsteuerelements in XF verwendet, z. B. NavigationPage.

Für native Kontrolle von XF, ich denke, es ist möglich, dass Sie das Xamarin.Forms.ToolbarItem nicht bemerkt haben. Es wird auch wie Toolbar gerendert und Sie können die Order-Eigenschaft auf ToolbarItem festlegen, um das Element anzugeben, das auf primären, sekundären oder Standard-Werkzeugoberflächen angezeigt werden soll.

Für benutzerdefinierte Renderer ist es möglich, dass Sie auf dieses Blog verweisen: Xamarin Forms - ContentPage with SearchBar in the Navigation bar.

Ich weiß nicht, welche die beste Wahl für Sie ist, aber ich möchte Ihnen Ihre beiden Fragen erläutern. XF ist wie ein UI-Toolkit, alle Steuerelemente, die basierend auf dem nativen SDK erstellt wurden, bedeutet, dass alle Steuerelemente als übereinstimmendes natives Steuerelement dargestellt werden, sodass es in einer nativen Plattform verwendet werden kann. Also, wenn ein XF-Steuerelement als Toolbar in Android-Plattform gerendert wird, sollte das Verhalten die gleiche wie normal sein Toolbar in nativen Android, ABER wie wir die Renderer anpassen, wenn das XF-Steuerelement erstellt wird, sind viele Eigenschaften in seinem Code fest codiert , die hier das Ergebnis haben können. Wenn Sie auf ein solches Problem stoßen, schlage ich vor, die Open Source auf Github zu lesen.

Für Ihre letzte Frage:

Wenn in Xamarin.Android definiert Xamarin.Forms können Sie eine Symbolleiste mit? Wie?

Sie können entweder mit benutzerdefinierten Renderer oder direkt den Code in Toolbar.axml in nativen Client Android-Projekt ändern.

+0

Sehr nützliche Info, danke. Ich habe die XF Toolbar als Prototyp erstellt, aber es ist nicht in der Lage, verschachtelte Listen und ein paar andere Dinge zu machen, die die native Android Toolbar haben kann. Deshalb bin ich neugierig darauf, wie man für die fehlende Funktionalität auf native zurückgreifen kann. – KrustyGString