2012-12-15 9 views
9

Próbuję użyć Sliding Menu w mojej aplikacji. Na moim Sony Xperia S działa bardzo ładnie, ale kiedy próbuję uruchomić aplikację w HTC Desire HD, menu otwiera się perfekcyjnie gestem, ale inne zdarzenia dotykowe są blokowane, a widok z góry (ViewPager, przesuwne menu jest za nim) nie przewija się.Przesuwne menu blokuje zdarzenie dotykowe w górnym widoku

Czy ktoś wie, jak to naprawić?

Może to będzie pomocne, aby dać odpowiedź (to jest, jak ja za pomocą 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);  
} 

W onPageSelected(), mam menu włączyć lub wyłączyć, więc menu pojawia się tylko po lewej stronie:

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

Odpowiedz

9

prostu miałem ten sam problem z Przesuwane menu działa poprawnie na moim Samsung Galaxy S2 ICS ale nie działa na moim HTC Desire z systemem Gingerbread.

Użyłem tej samej metody, co przy wdrażaniu przesuwanego menu, ale stwierdziłem, że inna implementacja rozwiązała problem.

Zamiast ręcznego mocowania menu do aktywności:

mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 

Wybrałem przedłużyć aktywny przez jednego z działań przesuwne z biblioteki SlidingMenu. W moim przypadku moja Aktywność najpierw rozszerzyła się na FragmentActivity, ale zastąpiłem ją SlidingFragmentActivity

Następnie powinieneś ustawić metodę behindView w metodzie onCreate, aby Twoja aktywność się zawiesiła.

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

To powinno naprawić problem.

Oto przykładowy kod mojej działalności:

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

Będziesz pamiętać, że z tego rozwiązania nie trzeba zadzwonić

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

nie przeanalizowali cały kod źródłowy biblioteki SlidingMenu, ale być może obecna metoda attachToActivity jest w niektórych przypadkach błędna, a te błędy nie pojawiają się, jeśli korzystamy ze specjalnych działań zapewnionych przez bibliotekę.

EDYCJA: OK dla tych, którzy pracują z biblioteką Sliding Menu i ActionBarSherlock (ABS). Najpierw musisz upewnić się, że ABS jest odwołany w bibliotece SlidingMenu. W ten sposób będziesz mógł rozszerzyć klasy działań zapewniane przez Sliding Menu o ABS.

przykład jeśli chcę użyć FragmentActivity zarówno z ABS i menu przesuwny: trzeba zmienić w przesuwnych menu biblioteki

class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase 

przez

class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase 

a następnie w was aplikacji używaj normalnie SlidingFragmentActivity.

Oto kod z mojej aplikacji, to jak ten napisałem ale ze wsparciem 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 
+0

Ok, rozciągający się od ** SlidingActivity ** działa idealnie, ale jest jedna rzecz, którą can' do zrobienia: slajdy na pasku działań z zawartością. Jak dołączyć go do menu? Nie znalazłem żadnej metody (na przykład attachMode (int)) ... –

+0

Spróbuj wywołać 'setSlidingActionBarEnabled (true);' po dostosowaniu menu, poślizgnie ActionBar. Domyślną wartością tego ustawienia jest fałsz, dlatego tylko zawartość przesuwa się. – FabriceMk

+1

Czy możesz zaakceptować odpowiedź, jeśli rozwiązanie zadziała dla Ciebie? – FabriceMk

Powiązane problemy