0

所以我看了這個YouTube(https://www.youtube.com/watch?v=TahxgjZTpSA&list=PLCuRg51-gw5VqYchUekCqxUS9hEZkDf6l&index=49)的教程,並用他的樣本代碼(樣品50:http://cforbeginners.com/XamarinProjects.html)在他的網站上找到。我跑了樣本,漢堡包出現箭頭動畫,但當我試圖在我的解決方案項目上實現它時,沒有動畫或圖標。沒有漢堡包到箭頭動畫或圖標顯示在抽屜

我甚至遠去進行測試;我創建了一個新的解決方案,並將樣本文件複製到新的解決方案和相同的結果,而不是動畫或圖標。所以在這一點上,我想的是內部的東西導致沒有漢堡包到箭頭動畫或圖標的問題。

我嘗試這個解決方案,他們沒有工作:從樣品

ActionBarDrawerToggle.syncState Doesn't show the hamburger icon?

Appcompatv7 - v21 Navigation drawer not showing hamburger icon

Navigation Drawer with Burger to back arrow animation on Lollipop

文件:

MainActivity:

using System; 

using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using SupportToolbar = Android.Support.V7.Widget.Toolbar; 
using Android.Support.V7.App; 
using Android.Support.V4.Widget; 
using System.Collections.Generic; 

namespace test.Droid 
{ 
    [Activity (Label = "test.Droid", Icon = "@drawable/icon", MainLauncher = true, Theme="@style/MyTheme")] 
    public class MainActivity : ActionBarActivity 
    { 
     private SupportToolbar mToolbar; 
     private MyActionBarDrawerToggle mDrawerToggle; 
     private DrawerLayout mDrawerLayout; 
     private ListView mLeftDrawer; 
     private ListView mRightDrawer; 
     private ArrayAdapter mLeftAdapter; 
     private ArrayAdapter mRightAdapter; 
     private List<string> mLeftDataSet; 
     private List<string> mRightDataSet; 

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

      // Set our view from the "main" layout resource 
      SetContentView (Resource.Layout.Main); 

      mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar); 
      mDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout); 
      mLeftDrawer = FindViewById<ListView>(Resource.Id.left_drawer); 
      mRightDrawer = FindViewById<ListView>(Resource.Id.right_drawer); 

      mLeftDrawer.Tag = 0; 
      mRightDrawer.Tag = 1; 

      SetSupportActionBar(mToolbar); 

      mLeftDataSet = new List<string>(); 
      mLeftDataSet.Add ("Left Item 1"); 
      mLeftDataSet.Add ("Left Item 2"); 
      mLeftAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, mLeftDataSet); 
      mLeftDrawer.Adapter = mLeftAdapter; 

      mRightDataSet = new List<string>(); 
      mRightDataSet.Add ("Right Item 1"); 
      mRightDataSet.Add ("Right Item 2"); 
      mRightAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, mRightDataSet); 
      mRightDrawer.Adapter = mRightAdapter; 

      mDrawerToggle = new MyActionBarDrawerToggle(
       this,       //Host Activity 
       mDrawerLayout,     //DrawerLayout 
       Resource.String.openDrawer,  //Opened Message 
       Resource.String.closeDrawer  //Closed Message 
      ); 

      mDrawerLayout.SetDrawerListener(mDrawerToggle); 
      SupportActionBar.SetHomeButtonEnabled(true); 
      SupportActionBar.SetDisplayShowTitleEnabled(true); 
      mDrawerToggle.SyncState(); 

      if (bundle != null) 
      { 
       if (bundle.GetString("DrawerState") == "Opened") 
       { 
        SupportActionBar.SetTitle(Resource.String.openDrawer); 
       } 

       else 
       { 
        SupportActionBar.SetTitle(Resource.String.closeDrawer); 
       } 
      } 

      else 
      { 
       //This is the first the time the activity is ran 
       SupportActionBar.SetTitle(Resource.String.closeDrawer); 
      } 
     } 

     public override bool OnOptionsItemSelected (IMenuItem item) 
     {  
      switch (item.ItemId) 
      { 

      case Android.Resource.Id.Home: 
       //The hamburger icon was clicked which means the drawer toggle will handle the event 
       //all we need to do is ensure the right drawer is closed so the don't overlap 
       mDrawerLayout.CloseDrawer (mRightDrawer); 
       mDrawerToggle.OnOptionsItemSelected(item); 
       return true; 

      case Resource.Id.action_refresh: 
       //Refresh 
       return true; 

      case Resource.Id.action_help: 
       if (mDrawerLayout.IsDrawerOpen(mRightDrawer)) 
       { 
        //Right Drawer is already open, close it 
        mDrawerLayout.CloseDrawer(mRightDrawer); 
       } 

       else 
       { 
        //Right Drawer is closed, open it and just in case close left drawer 
        mDrawerLayout.OpenDrawer (mRightDrawer); 
        mDrawerLayout.CloseDrawer (mLeftDrawer); 
       } 

       return true; 

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

     public override bool OnCreateOptionsMenu (IMenu menu) 
     { 
      MenuInflater.Inflate (Resource.Menu.action_menu, menu); 
      return base.OnCreateOptionsMenu (menu); 
     } 

     protected override void OnSaveInstanceState (Bundle outState) 
     { 
      if (mDrawerLayout.IsDrawerOpen((int)GravityFlags.Left)) 
      { 
       outState.PutString("DrawerState", "Opened"); 
      } 

      else 
      { 
       outState.PutString("DrawerState", "Closed"); 
      } 

      base.OnSaveInstanceState (outState); 
     } 

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

     public override void OnConfigurationChanged (Android.Content.Res.Configuration newConfig) 
     { 
      base.OnConfigurationChanged (newConfig); 
      mDrawerToggle.OnConfigurationChanged(newConfig); 
     } 
    } 
} 

MyActionBarDrawerToggle:

using System; 
using SupportActionBarDrawerToggle = Android.Support.V7.App.ActionBarDrawerToggle; 
using Android.Support.V7.App; 
using Android.Support.V4.Widget; 

namespace test.Droid 
{ 
    public class MyActionBarDrawerToggle : SupportActionBarDrawerToggle 
    { 
     private ActionBarActivity mHostActivity; 
     private int mOpenedResource; 
     private int mClosedResource; 

     public MyActionBarDrawerToggle (ActionBarActivity host, DrawerLayout drawerLayout, int openedResource, int closedResource) 
      : base(host, drawerLayout, openedResource, closedResource) 
     { 
      mHostActivity = host; 
      mOpenedResource = openedResource; 
      mClosedResource = closedResource; 
     } 

     public override void OnDrawerOpened (Android.Views.View drawerView) 
     { 
      int drawerType = (int)drawerView.Tag; 

      if (drawerType == 0) 
      { 
       base.OnDrawerOpened (drawerView); 
       mHostActivity.SupportActionBar.SetTitle(mOpenedResource); 
      } 
     } 

     public override void OnDrawerClosed (Android.Views.View drawerView) 
     { 
      int drawerType = (int)drawerView.Tag; 

      if (drawerType == 0) 
      { 
       base.OnDrawerClosed (drawerView); 
       mHostActivity.SupportActionBar.SetTitle(mClosedResource); 
      }    
     } 

     public override void OnDrawerSlide (Android.Views.View drawerView, float slideOffset) 
     { 
      int drawerType = (int)drawerView.Tag; 

      if (drawerType == 0) 
      { 
       base.OnDrawerSlide (drawerView, slideOffset); 
      } 
     } 
    } 
} 

樣式:

<?xml version="1.0" encoding="UTF-8" ?> 
<resources> 

    <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="colorPrimary">#2196F3</item> 
     <item name="drawerArrowStyle">@style/MyDrawerArrowStyle</item> 
    </style> 

    <style name="MyDrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="color">#F5F5F5</item> 
     <item name="spinBars">true</item> 
    </style> 
</resources> 

MainLayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" /> 
    <android.support.v4.widget.DrawerLayout 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    <!-- The Main Content View --> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Support V7 Action Bar Drawer Toggle" 
       android:layout_centerInParent="true" /> 
     </RelativeLayout> 
    <!-- The Left Navigation Drawer --> 
     <ListView 
      android:id="@+id/left_drawer" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:choiceMode="singleChoice" 
      android:divider="#818181" 
      android:dividerHeight="1dp" 
      android:background="#E3F2FD" /> 
     <ListView 
      android:id="@+id/right_drawer" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="right" 
      android:choiceMode="singleChoice" 
      android:divider="#E2E2E2" 
      android:dividerHeight="1dp" 
      android:background="#9E9E9E" /> 
    </android.support.v4.widget.DrawerLayout> 
</LinearLayout> 

菜單:

<?xml version="1.0" encoding="UTF-8" ?> 

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:myapp="http://schemas.android.com/apk/res-auto"> 

    <item android:id="@+id/action_refresh" 
     android:icon="@drawable/ic_action_refresh" 
     android:title="Refresh" 
     myapp:showAsAction="always" /> 

    <item android:id="@+id/action_help" 
     android:icon="@drawable/ic_action_help" 
     android:title="Help" 
     myapp:showAsAction="always"/> 

</menu> 

回答

1

你錯過了在ActionBar調用SetDisplayHomeAsUpEnabled()

SupportActionBar.SetDisplayHomeAsUpEnabled(true); 
+0

謝謝你的工作。樣本解決方案未包含該聲明,並且仍顯示動畫。你知道爲什麼是這樣嗎? – PLOW

+0

給我一分鐘。我會看看示例代碼。 –

+0

嗯,我不確定。我實際上並不熟悉Xamarin。我只知道Java SDK中的類似方法。如果我弄明白了,我會讓你知道的。 –

相關問題