2012-12-15 1 views
9

J'essaie d'utiliser Sliding Menu dans mon application. Sur mon Sony Xperia S ça marche très bien, mais quand j'essaye de lancer l'application sur HTC Desire HD, le menu s'ouvre parfaitement par geste, mais les autres évènements tactiles sont bloqués et la vue de dessus (ViewPager, menu coulissant derrière) ne défile pas.Le menu coulissant verrouille l'événement tactile sur la vue supérieure

Est-ce que quelqu'un sait comment résoudre ce problème?

peut être il sera utile de donner une réponse (Voici comment je l'aide du 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);  
} 

Dans onPageSelected(), désactiver le menu ou l'activer, si le menu apparaît uniquement à la page gauche:

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

Répondre

9

Je viens d'avoir le même problème avec l'amende de travail Menu coulissant sur ma course Samsung Galaxy S2 ICS, mais pas sur mon HTC Desire en cours d'exécution en pain d'épice.

J'ai utilisé la même méthode que vous pour implémenter le menu coulissant mais j'ai trouvé qu'une autre implémentation résolvait le problème.

Au lieu de fixer manuellement le menu à votre activité:

mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); 

J'ai choisi d'étendre mon activité par l'une des activités coulissantes de la bibliothèque SlidingMenu. Dans mon cas, mon activité s'étendait au début FragmentActivity mais je l'ai remplacé par SlidingFragmentActivity

Ensuite, vous devez définir le behindView dans la méthode onCreate ou votre activité va planter.

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

Cela devrait résoudre le problème.

Voici un exemple de code de mon activité:

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

Vous remarquerez que cette solution vous n'avez pas appeler

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

Je n'ai pas analysé tout le code source de la bibliothèque SlidingMenu mais peut-être la méthode actuelle attachToActivity est boguée dans certains cas et ces bogues n'apparaissent pas si nous utilisons les activités spéciales fournies par la bibliothèque.

EDIT: Ok pour ceux qui travaillent avec la bibliothèque SlidingMenu ET ActionBarSherlock (ABS). Vous devez d'abord vous assurer que l'ABS est référencé dans la librairie SlidingMenu. De cette façon, vous pourrez étendre les classes d'activités fournies par SlidingMenu par les ABS.

exemple si je veux utiliser un FragmentActivity avec ABS et Sliding Menu: vous devez changer dans la bibliothèque de menu coulissant

class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase 

par

class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase 

Et puis dans votre application, utilisez le SlidingFragmentActivity normalement.

Voici le code de mon application, il est comme celui que je posté, mais avec le soutien 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, allant de ** SlidingActivity ** fonctionne parfaitement, mais il y a une chose que je can' À faire: des barres d'action glissent avec du contenu. Comment l'attacher au menu? Je n'ai trouvé aucune méthode (par exemple attachMode (int)) ... –

+0

Essayez d'appeler 'setSlidingActionBarEnabled (true);' après les personnalisations du menu, il fera glisser le ActionBar. La valeur par défaut pour ce paramètre est false, c'est pourquoi seul le contenu est glissé. – FabriceMk

+1

Pourriez-vous accepter la réponse si la solution a fonctionné pour vous s'il vous plaît? – FabriceMk