Android 滑动菜单锁定上视图的触摸事件

Android 滑动菜单锁定上视图的触摸事件,android,menu,android-viewpager,slidingdrawer,Android,Menu,Android Viewpager,Slidingdrawer,我正在尝试在我的应用程序中使用。在我的Sony Xperia S上,它工作得非常好,但当我尝试在HTC Desire HD上启动应用程序时,菜单通过手势完美打开,但其他触摸事件被阻止,并且俯视图(ViewPager,滑动菜单在其后面)没有滚动 有人知道怎么解决这个问题吗 回答可能会有帮助(这是我使用菜单的方式): 在onPageSelected()中,我禁用或启用了菜单,所以菜单仅显示在左侧页面: @Override public void onPageSelected(int arg0) {

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

有人知道怎么解决这个问题吗

回答可能会有帮助(这是我使用菜单的方式):

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运行的集成电路,但不是我的HTC欲望运行姜饼

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

不要手动将菜单附加到活动:

mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);   
我选择通过滑动菜单库中的一个滑动活动来扩展我的活动。在我的例子中,我的活动最初是扩展
FragmentActivity
,但我将其替换为
SlidingFragmentActivity

然后应该在
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);
您将注意到,使用此解决方案,您不必调用

mSlidingMenu.setMenu(firstPage);
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
我还没有分析SlidingMenu库的所有源代码,但可能当前的
attachToActivity
方法在某些情况下有缺陷,如果我们使用库提供的特殊活动,这些缺陷就不会出现

编辑:适用于使用滑动菜单库和操作栏夏洛克(ABS)的用户。 首先,您必须确保在滑动菜单库中引用ABS。这样,您就可以通过ABS扩展SlidingMenu提供的活动类

示例:如果我想将FragmentActivity与ABS和滑动菜单一起使用: 您必须在滑动菜单库中进行更改

class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase

然后在应用程序中,正常使用
滑动片段活动

以下是我的应用程序代码,与我发布的应用程序类似,但支持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

好的,从SlideingActivity扩展到现在效果很好,但有一件事我做不到:带内容的动作条幻灯片。如何将其附加到菜单?我没有找到任何方法(例如attachMode(int))…尝试调用
setSlidingActionBarEnabled(true)菜单自定义后,它将滑动操作栏。此设置的默认值为false,这就是为什么只有内容幻灯片。如果解决方案对您有效,您能接受答案吗?不幸的是,我尝试了您的解决方案,但它没有解决问题:操作栏无法保留,带内容的幻灯片您使用的是ActionBarSherlock之类的库还是本机ActionBar?如果您使用的是ABS,我将更新我的代码,因为我也在使用它,一个简单的布尔值让我在滑动操作栏与否之间进行选择
class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase
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