2016-09-14 182 views
2

我正在構建Xamarin Android應用程序,我想在自定義操作欄中實現帶抽屜的右側導航抽屜。一切正常(抽屜從右側滑出,......),除了一件事情:導航抽屜圖標未顯示。未顯示導航抽屜圖標

所以,這是我的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> 

難道我做錯了什麼?任何幫助表示讚賞。

UPDATE

我CustomActionBar有應用程序圖標和應用的標題。這可能會中斷導航抽屜圖標?

+0

是你能解決這個問題? – user427969

+0

@ user427969我在下面發佈了我的解決方案,所以如果它解決了您的問題,請投票 – PeMaCN

回答

0

這是我已經找到了解決辦法。

首先,你需要添加action_bar.xml文件包含以下內容的菜單文件夾:

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

然後在你的活動中插入此代碼:

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

不要忘記調用actionbarDrawerToggle.syncState()

+0

我在'OnPostCreate()'方法中調用它,如果我在'OnCreate()'方法中調用它,它也不會顯示。 – PeMaCN

+0

我覺得默認的drawerToggle在左邊。嘗試把你的抽屜放在左邊,檢查圖標是否出現。如果顯示,我認爲你應該在操作欄中創建自己的圖標。 – Chenmin

+0

不,圖標不顯示 – PeMaCN