2013-07-06 178 views
50

有什么方法可以确保导航抽屉位于碎片内容的顶部吗?导航抽屉 - 禁用点击抽屉后面的物品

我用虚拟数据创建了一个小测试应用程序。 10个带有相应编号按钮和textview的片段。问题在于片段元素似乎比导航抽屉具有更高的优先级。

enter image description here

正如所看到的截图,有一次我尝试打开了“0片段”它,而不是选择只登记在导航抽屉后面的按钮点击。按任何其他内容项目都可以正常工作,但只要在其下面没有其他可交互项目,就可以。我可以做些什么来让导航抽屉正确地保持在它背后的内容之上?

+0

你有没有尝试设置actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); ? – Hruskozrout

回答

-1

嗯,我发现这个问题的一个解决方案。当抽屉打开时,您可以通过在您使用的布局上调用bringToFront()方法将导航栏放在前面。这可确保导航抽屉一直处于任何基础内容之上,直到选择了新项目为止。

即:

@Override 
public void onDrawerOpened(View drawerView) 
    { 
    activity.getActionBar().setTitle("Select content"); 
    activity.invalidateOptionsMenu(); 
    drawerLayout.bringToFront(); 
    } 
+0

android:clickable =“true”对抽屉布局是足够的 – moondroid

+0

它为我工作 – silverFoxA

124

上滑动面板布局设置android:clickable="true"标签。

+2

完美地为我工作 –

+0

谢谢,马里奥 – vuhung3990

+0

这个答案节省了我的时间.. :)工作完美.... – IshRoid

3

在我的片段抽屉中,我设置了TouchListener以返回True。 它为我工作

 mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return true; 
     } 
    }); 
+0

最好的解决方案,接受并没有为我工作。 – peresisUser

2

我解决了它以不同的方式。

这里是我设置的抽屉代码:

/** 
* Setup Navigation Drawer 
*/ 
private void setDrawer() { 
    NavigationDrawerFragment mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer); 
    mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar); 
} 

setup方法是我NavigationDrawerFragment里面,这是我为它的代码:

/** 
* Users of this fragment must call this method to set up the navigation drawer interactions. 
* 
* @param fragmentId The android:id of this fragment in its activity's layout. 
* @param drawerLayout The DrawerLayout containing this fragment's UI. 
* @param toolbar  The Toolbar of the activity. 
*/ 
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { 
    View mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent(); 
    DrawerLayout mDrawerLayout = drawerLayout; 

    //noinspection deprecation 
    mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark)); 

    ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, "Drawer opened", "Drawer closed") { 
     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      if (!isAdded()) return; 

      // Solution: 
      // Disable click event on views below Navigation Drawer 
      mFragmentContainerView.setClickable(false); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      if (!isAdded()) return; 

      // Solution: 
      // Enable click event on views below Navigation Drawer 
      mFragmentContainerView.setClickable(true); 
      getActivity().invalidateOptionsMenu(); 
     } 
    }; 

    // Defer code dependent on restoration of previous instance state. 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mActionBarDrawerToggle.syncState(); 
     } 
    }); 

    //noinspection deprecation 
    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); 
} 

就是这样