导航抽屉图标没有显示

时间:2016-09-14 12:53:18

标签: android xamarin.android

我正在构建Xamarin Android应用程序,我想在自定义操作栏中实现带抽屉toogle的右导航抽屉。一切正常(抽屉从右侧滑动,......)除了一件事:导航抽屉图标没有显示。

所以,这是我的Activity.axml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <android.support.v4.widget.DrawerLayout
           android:orientation="vertical"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="#ffffff"
           android:id="@+id/drawerLayout">

           <!-- Main Content -->
           <FrameLayout xmlns:tools="http://schemas.android.com/tools"
               android:layout_width="match_parent"
               android:layout_height="match_parent">
               <fragment
                    android:name="com.google.android.gms.maps.MapFragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:scrollbars="vertical"
                    android:id="@+id/map" />
                     ...
           </FrameLayout>

           <!-- Right Navigation Drawer -->
           <LinearLayout
               android:orientation="vertical"
               android:layout_width="250dp"
               android:layout_height="match_parent"
               android:layout_gravity="right"
               android:background="#f2f2f2">
               ...
            </LinearLayout>
     </android.support.v4.widget.DrawerLayout>
</RelativeLayout>

这是我的Activity.cs

using Android.Support.V4.App;
using Android.Support.V4.Widget;
... 

public class Activity : Activity
{
    ...
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mDrawerToogle;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        ActionBar.SetDisplayShowHomeEnabled(false);
        ActionBar.SetDisplayShowTitleEnabled(false);
        ActionBar.SetCustomView(Resource.Layout.CustomActionBar);
        ActionBar.SetDisplayShowCustomEnabled(true);

        SetContentView(Resource.Layout.Activity2);

        mDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawerLayout);
        mDrawerToogle = new ActionBarDrawerToggle(this, mDrawerLayout, Resource.Drawable.ic_drawer,Resource.String.open_drawer_layout, Resource.String.close_drawer_layout);

        mDrawerLayout.SetDrawerListener(mDrawerToogle);
        ActionBar.SetDisplayHomeAsUpEnabled(true);
        ActionBar.SetHomeButtonEnabled(true);

        ...
    }

    protected override void OnPostCreate(Bundle savedInstanceState)
    {
        base.OnPostCreate(savedInstanceState);
        mDrawerToogle.SyncState();
    }

    public override void OnConfigurationChanged(Configuration newConfig)
    {
        base.OnConfigurationChanged(newConfig);
        mDrawerToogle.OnConfigurationChanged(newConfig);
    }

    public override bool OnOptionsItemSelected(IMenuItem item)
    {
        if (mDrawerToogle.OnOptionsItemSelected(item))
        {
            return true;
        }

        return base.OnOptionsItemSelected(item);
    }
    ...
}

这是我的Themes.xml

<resources>
   <style name="CustomActionBarTheme"
     parent="@android:style/Theme.Holo.Light.DarkActionBar">
       <item name="android:actionBarStyle">@style/ActionBar</item>
   </style>
   <style name="ActionBar"
     parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
       <item name="android:height">75dp</item>
       <item name="android:background">#00000000</item>
   </style>
</resources>

我做错了吗?任何帮助表示赞赏。

更新

我的CustomActionBar有app图标和app标题。这可能会打断导航抽屉图标吗?

2 个答案:

答案 0 :(得分:0)

请勿忘记致电 actionbarDrawerToggle.syncState()

答案 1 :(得分:0)

This is the solution I have found.

First, you need to add action_bar.xml file with the following content to the menu folder:

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item 
    android:id="@+id/personalInfoActionBar"
    android:title="Informations"
    android:icon="@drawable/infoIcon"
    android:showAsAction="always"/>
</menu>

Then insert this code in your activity:

public override bool OnOptionsItemSelected(IMenuItem item)
{
    if (item.ItemId == Resource.Id.personalInfoActionBar)
    {
         if (mDrawerLayout.IsDrawerOpen(mRightDrawer))
         {
              mDrawerLayout.CloseDrawer(mRightDrawer);
         }
         else
         {
              mDrawerLayout.OpenDrawer(mRightDrawer);
         }

         return true;
    }

    return base.OnOptionsItemSelected(item);
}