微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 滑动菜单锁定上部视图上的触摸事件

我正在尝试在我的应用程序中使用Sliding Menu.在我的索尼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);
}

解决方法:

我刚刚在运行ICS的三星galaxy S2上运行Sliding菜单时出现了同样的问题,但在运行Gingerbread的HTC Desire上没有.

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

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

mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);   

我选择通过SlidingMenu库中的一个Sliding活动扩展我的Activity.在我的例子中,我的Activity首先扩展了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方法可能有问题,如果我们使用库提供的特殊活动,则不会出现这些错误.

编辑:对于那些使用SlidingMenu库和ActionBarSherlock(ABS)的人来说很好.
首先,您必须确保在SlidingMenu lib中引用了ABS.这样,您就可以通过ABS扩展SlidingMenu提供的活动类.

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐