2016-05-23 5 views
2

ページにはスライド移動に反応するチャートビューが含まれているViewPagerがあります。これにより、画面の端からスライドさせてページを変更することになりました。しかし、これはNavigationDrawerを開くジェスチャーでもあるという問題を私に残します。私は今も閉じないようにロックモードを設定し、Androidのサポートデザインライブラリ23.1.1.1にアップデートするまでは、意図したとおりに働いていたNavigationDrawerがジェスチャーで開かれるのを防ぐが、サポートデザインライブラリのハンバーガーアイコンから許可する方法23.1.1.1

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

    SetContentView(GetLayoutId()); 

    Toolbar = FindViewById<Toolbar>(Resource.Id.toolbar); 
    if (Toolbar != null) 
    { 
    // set this flag so the colors colorPrimaryDark and android:statusBarColor have an effect 
    // setting android:statusBarColor to transparent causes the drawer to be dran underneath a translucent status bar 
    Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds); 

    // make the toolbar the replacement of the action bar 
    SetSupportActionBar(Toolbar); 
    } 

    // add the hamburger icon 
    m_DrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout); 
    var actionBarDrawerToggle = new ActionBarDrawerToggle(this, m_DrawerLayout, Toolbar, Resource.String.empty, Resource.String.empty); 
    m_DrawerLayout.AddDrawerListener(actionBarDrawerToggle); 

    // make sure the drawer can't be opened by swiping, to do this we set the lock mode to closed 
    // but if we just do this, it can't be closed by swiping either, so set the lock mode to unlocked when the drawer is opened, and locked again when it's closed 
    m_DrawerLayout.DrawerOpened += (object sender, DrawerLayout.DrawerOpenedEventArgs e) => 
    { 
    m_DrawerLayout.SetDrawerLockMode(DrawerLayout.LockModeUnlocked); 
    }; 
    m_DrawerLayout.DrawerClosed += (object sender, DrawerLayout.DrawerClosedEventArgs e) => 
    { 
    m_DrawerLayout.SetDrawerLockMode(DrawerLayout.LockModeLockedClosed); 
    }; 
    m_DrawerLayout.SetDrawerLockMode(DrawerLayout.LockModeLockedClosed); 

    //calling sync state is necessay or else the hamburger icon wont show up 
    actionBarDrawerToggle.SyncState(); 
} 

は今まで、私はこれを達成するために、次のコードを使用しましたハンバーガーアイコンをタップしてメニューを開くことができなくなります。

+0

非標準的な振る舞い:) – jaibatrik

+0

'DrawerLayout'から拡張したカスタム' View'を作成する必要があるかもしれません。 – jaibatrik

+0

それが実際にそれを引き起こしている更新プログラムの場合は、その部分の騒ぎのように思えます。あなたはおそらく、以前のライブラリバージョンに戻すか、それを修正するか、それが今や意図された振る舞いであると述べ、楽しいものではないと言います。これは、古い振る舞いを得るために不必要に複雑な回避策をとるためです。 –

答えて

2

ActionBarDrawerToggleクラスの最新バージョンのソースコードを見ると、これは実際には新しい意図された動作であるようです。それは以前にちょうど引き出しの開いた/閉じた状態をチェックするのに対し、

private void toggle() { 
    int drawerLockMode = mDrawerLayout.getDrawerLockMode(GravityCompat.START); 
    if (mDrawerLayout.isDrawerVisible(GravityCompat.START) 
     && (drawerLockMode != DrawerLayout.LOCK_MODE_LOCKED_OPEN)) { 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
    } 
    else if (drawerLockMode != DrawerLayout.LOCK_MODE_LOCKED_CLOSED) { 
     mDrawerLayout.openDrawer(GravityCompat.START); 
    } 
} 

:それはtoggle()方法は次のようになります。

これは、以前の動作を達成するための回避策が採用されるため、残念です。おそらく最も簡単なのは、古いバージョンのサポートライブラリに戻すことだけです。ただし、最新のバージョンを使用したい場合は、次のような解決策が考えられます。

ActionBarDrawerToggleコンストラクタ呼び出しから、最初にToolbar引数を削除します。

actionBarDrawerToggle = new ActionBarDrawerToggle(this, 
                m_DrawerLayout, 
                Resource.String.empty, 
                Resource.String.empty); 

これは、あなたがサポートActionBarとしてToolbarを設定しているので、ActivityさんOnOptionsItemSelected()方法は、トグルをクリックすると発火する原因となります。 ActionBarDrawerToggleクラスは、であるActionBarと少し異なるやり方で、Toolbarと子どもとのやりとりが異なるので、SupportActionBar.SetDisplayHomeAsUpEnabled(true)に電話する必要があります。Viewです。

ActivityOnOptionsItemSelected()メソッドでは、ドロワーの開閉を処理するトグル独自のOnOptionsItemSelected()メソッドを呼び出す前に、ドロワーのロックを解除するだけです。

public override bool OnOptionsItemSelected (IMenuItem item) 
{  
    switch (item.ItemId) 
    { 
     case Android.Resource.Id.Home: 
      m_DrawerLayout.SetDrawerLockMode(DrawerLayout.LockModeUnlocked); 
      actionBarDrawerToggle.OnOptionsItemSelected(item); 

      return true; 
     ... 
    } 
    ... 
} 

あなたactionBarDrawerToggleは、あなたのActivityのフィールドが必要になります、あなたはDrawerOpenedハンドラを削除することができます。

+0

ありがとう、これは動作します。追加する必要があるのはもう一つだけです: 'SupportActionBar.SetDisplayHomeAsUpEnabled(true);それ以外の場合、ハンバーガーのアイコンは表示されません。 そして、サポートライブラリの古いバージョンを使い続けることを避けたいと思います。アプリがまだ開発中で、アプリが初めてリリースされる前に古いものを使用することを余儀なくされたくない... – Naryoril

+0

ああ、ええ、私はあなたが持っていなかったことに気付かなかったそれはすでに。クール。それがうまくいってうれしい。乾杯! –

関連する問題