Xamarin NavigationView菜单项自定义

时间:2016-05-18 14:29:13

标签: c# android xamarin fonts navigationview

您好我使用C#和Xamarin开发我的新应用程序并使用此平台遇到了许多问题。是否可以使用xamarin自定义NavigationView中的菜单项?我发现的只有valid properties for the menu items。 但如果不是这样的话呢?

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

我想这样做:

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

是否可以使用xamarin?我还有什么其他选择?

除此之外我发现Xamarin API非常严格,例如你不能直接在xml中使用自定义ttf字体来设置菜单项的字体:

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

此外,如果我为整个菜单项容器应用样式,也无法使用自定义字体,我们可以使用的唯一字体是内置字体......

即使我在Activity中引用了一个单独的菜单项(IMenuItem),也没有设置字体系列的属性或函数。

2 个答案:

答案 0 :(得分:0)

可以定义更复杂的NavigationView。只需将子控件放在NavigationView-Tag中即可。例如,这是我使用NavigationView实现页脚的方式。对于子控件没有任何限制,所以你也可以使用Buttons等:

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

例如,要更改项目的TextSize,您必须定义自己的样式:

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

然后将其分配给您的NavigationView:

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

答案 1 :(得分:0)

这是我格式化导航菜单项的方式,它以图标开头,然后是菜单文本,最后一个是数字。它看起来像是gmail 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

&#13;
&#13;
<?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>
&#13;
&#13;
&#13;