滑动菜单locking上视图上的触摸事件

我试图在我的应用程序中使用滑动菜单 。 在我的索尼Xperia S上它工作得很好,但是当我尝试在HTC Desire HD上启动应用程序时,菜单通过手势打开完美,但其他触摸事件被阻止,并且顶部视图( ViewPager ,滑动菜单在它后面)不滚动。

有谁知道如何解决这个问题?

可能会有帮助给出答案(这是我如何使用菜单):

 private void initSlidingMenu() { mSlidingMenu = new SlidingMenu(getApplicationContext()); mSlidingMenu.setMode(SlidingMenu.LEFT); mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); mSlidingMenu.setShadowWidthRes(R.dimen.default_shadow_width); mSlidingMenu.setShadowDrawable(R.drawable.defaultshadow); mSlidingMenu.setBehindOffsetRes(R.dimen.default_behind_offset); mSlidingMenu.setFadeDegree(0.35f); mSlidingMenu.setMenu(firstPage); mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); } 

onPageSelected() ,我禁用菜单或启用它,所以菜单只出现在左页:

 @Override public void onPageSelected(int arg0) { ActivityCompat.invalidateOptionsMenu(this); if (arg0 == Utils.DEFAULT_PAGE) mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); else mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); } 

我只是有滑动菜单工作正常,我的三星Galaxy S2运行ICS,但不是我的HTC Desire运行姜饼相同的问题。

我用同样的方法来实现滑动菜单,但我发现另一个实现解决了这个问题。

而不是手动将菜单附加到您的活动:

 mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 

我select通过SlidingMenu库中的一个Sliding活动来扩展我的活动。 在我的例子中,我的Activity首先扩展了FragmentActivity ,但是我用SlidingFragmentActivityreplace了它

那么你应该在onCreate方法中设置behindView,否则你的活动将会崩溃。

 setBehindContentView(R.layout.slidingmenu); //Replace with the layout of your menu 

它应该解决这个问题。

以下是我的活动的示例代码:

 public class MainActivity extends SlidingFragmentActivity { SlidingMenu menu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Main view layout for the activity setContentView(R.layout.activity_listing); // set the Behind View : REQUIRED (replace with your menu's layout) setBehindContentView(R.layout.slidingmenu); menu = getSlidingMenu(); //Now you can customize your sliding menu if you want menu.setMode(SlidingMenu.LEFT); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.slidingmenu_shadow); menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); menu.setFadeDegree(0.35f); 

你会注意到,这个解决scheme你不必打电话

 mSlidingMenu.setMenu(firstPage); mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 

我没有分析SlidingMenu库的所有源代码,但是在某些情况下,当前的attachToActivity方法可能是错误的,如果我们使用库提供的特殊活动,那么这些错误就不会出现。

编辑:好的那些正在与SlidingMenu库和ActionBarSherlock(ABS)的人。 首先,您必须确保在SlidingMenu库中引用了ABS。 这样,您就可以将ABS SlidingMenu提供的活动类扩展。

例如,如果我想在ABS和Sliding菜单中使用FragmentActivity,则必须在滑动菜单库中进行更改

 class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase 

通过

 class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase 

然后在你的应用程序中,正常使用SlidingFragmentActivity

这里是我的应用程序的代码,它是像我发布的,但与ABS支持:

 public class MainActivity extends SlidingFragmentActivity { ActionBar mActionBar; SlidingMenu menu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listing); //Layout of the above view /* * ABS initialization */ mActionBar = getSupportActionBar(); mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); mActionBar.setDisplayHomeAsUpEnabled(true); /* * Sliding menu initialization */ menu = getSlidingMenu(); menu.setMode(SlidingMenu.LEFT); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.slidingmenu_shadow); menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); menu.setFadeDegree(0.35f); /* This line initializes the way the sliding menu is working if you set the boolean to true, the ActionBar will slide along with the content. if you set to false, only the content will slide and the ActionBar will not move */ setSlidingActionBarEnabled(true); // set the Behind View setBehindContentView(R.layout.slidingmenu); //Menu view