2016-05-18 20 views
0

Hallo Ich benutze C# und Xamarin, um meine neue Anwendung zu entwickeln und stieß auf viele Probleme mit dieser Plattform. Ist es möglich, Menüelemente in NavigationView mithilfe von Xamarin anzupassen? alles, was ich gefunden habe, sind die valid properties for the menu items. Aber was, wenn statt dessen:Xamarin NavigationView Menüpunkt Anpassung

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/itemOne" 
     android:title="Go to page one" /> 
    <item 
     android:id="@+id/itemTwo" 
     android:title="Go to page two" /> 
</menu> 

Ich möchte, dies zu tun:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView></TextView> 
    <Button></Button> 
    <SomeOtherControlHere></SomeOtherControlHere> 
</menu> 

Ist es möglich, mit Xamarin? Was sind meine anderen Optionen?

Abgesehen davon, dass ich fand, dass Xamarin API sehr restriktiv sind, zum Beispiel kann nicht Sie direkt in XML benutzerdefinierte Schriftarten Schriftarten verwenden die Schriftarten für Menüpunkte zu setzen:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item 
      android:id="@+id/itemOne" 
      android:title="Go to page one" 
      android:fontFamily="MyCustomFontName Or MyPathToFonts" /> <-- NOT VALID 
</menu> 

Auch wenn ich mich bewerben Stil für eine ganze menu items container es ist auch nicht möglich, benutzerdefinierte fonts zu verwenden, die einzigen fonts, die wir verwenden können, sind die eingebauten fonts ...

Auch wenn ich in meiner Activity einen Verweis auf einen einzelnen Menüpunkt (IMenuItem) bekomme, gibt es Keine Eigenschaft oder Funktion zum Festlegen der Schriftfamilie.

+0

Wie verwenden Sie NavigationView? Kannst du diesen Teil deiner axml zeigen? –

Antwort

0

Es ist möglich, eine komplexere NavigationView zu definieren. Legen Sie die Kindersteuerelemente einfach in das NavigationView-Tag. Zum Beispiel verwende ich die NavigationView, um eine Fußzeile zu implementieren. Es gibt keine Einschränkungen für das Kind so steuert, dass Sie können Sie Buttons etc. sowie:

<android.support.design.widget.NavigationView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/navigation_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    local:headerLayout="@layout/drawer_header" 
    local:theme="@style/NavigationDrawerStyle" 
    local:menu="@menu/drawer_menu"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="bottom" 
     android:orientation="vertical"> 
     <TextView 
      android:id="@+id/empty_spacer" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:clickable="false" 
      android:text="" /> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="65dp" 
      android:background="@drawable/footer_small" 
      android:orientation="vertical" 
      android:weightSum="1" /> 
    </LinearLayout> 
</android.support.design.widget.NavigationView> 

die Textsize der Elemente zum Beispiel zu ändern, müssen Sie einen eigenen Stil zu definieren:

<style name="NavigationDrawerStyle"> 
    <item name="android:textSize">24sp</item> 
    <!-- more properties --> 
</style> 

Weisen Sie es dann Ihrem NavigationView zu:

<android.support.design.widget.NavigationView app:theme="@style/NavigationDrawerStyle"> 
    <!-- ... --> 
</android.support.design.widget.NavigationView> 
0

So formatiere ich den Navigationsmenüeintrag, der mit dem Symbol beginnt, dann den Menütext, und der letzte ist die Nummer. Es sieht aus wie die in Google Mail App.

OnCreate

navigationView = FindViewById<NavigationView>(Resource.Id.wnl_nav_view); 

      //Add customize menu item style 
      IMenu menuNav = navigationView.Menu; 
      View view = View.Inflate(this, Resource.Layout._drawerMenuItemTemplate, null); 
      IMenuItem logoutItem = menuNav.FindItem(Resource.Id.nav_mail); 
      MenuItemCompat.SetActionView(logoutItem, view); 
      TextView txtNewNumber = view.FindViewById<TextView>(Resource.Id.txtNewNumber); 

_drawerMenuItemTemplate.axml

<?xml version="1.0" encoding="utf-8"?> 
 
<FrameLayout xmlns:card_view="http://schemas.android.com/apk/res-auto" 
 
    xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="fill_parent" 
 
    android:layout_height="wrap_content"> 
 
    <TextView 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:textColor="@color/primary_text" 
 
     android:text="3/30" 
 
     android:id="@+id/txtNewNumber" 
 
     android:layout_gravity="right" 
 
     android:fontFamily="@string/abc_font_family_display_2_material" 
 
     android:textSize="13sp" 
 
     android:textStyle="bold" 
 
     android:paddingRight="6dp" 
 
     android:layout_marginTop="14dp" /> 
 
</FrameLayout>