10

I'm trying to use Sliding Menu in my application. On my Sony Xperia S it works very nice, but when I try to launch app on HTC Desire HD, menu opens perfect by gesture, but other touch events are blocked and top view (ViewPager, sliding menu is behind it) is not scrolling.

Does anybody know how to fix this?

May be it will be helpful to give an answer (This is how I'm using menu):

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);    
}

In onPageSelected(), I disable menu or enable it, so menu appears only at left page:

@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);
}
4

1 に答える 1

9

ICSを実行しているSamsungGalaxyS2でスライドメニューが正常に機能するのと同じ問題が発生しましたが、Gingerbreadを実行しているHTCDesireでは問題が発生しませんでした。

スライドメニューを実装するためにあなたと同じ方法を使用しましたが、別の実装で問題が解決したことがわかりました。

メニューをアクティビティに手動で添付する代わりに:

mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);   

SlidingMenuライブラリのSlidingアクティビティの1つによってアクティビティを拡張することを選択しました。私の場合、FragmentActivity最初はアクティビティが拡張されていましたが、代わりにSlidingFragmentActivity

次に、メソッド内にbehindViewを設定する必要があります。そうしonCreateないと、アクティビティがクラッシュします。

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)を使用している人はOKです。まず、ABSがSlidingMenuライブラリで参照されていることを確認する必要があります。そうすることで、SlidingMenuが提供するアクティビティクラスをABSクラスで拡張できるようになります。

ABSとスライディングメニューの両方で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
于 2012-12-16T01:43:42.363 に答える