2013-06-25 2 views
8

Je travaille avec Facebook comme le menu coulissant, mais je suis confronté à un petit problème, je ne sais pas comment ajouter le menu coulissant dans chaque activité, comme le menu affiché dans PrincipalActivity comme ceci:Comment montrer le menu coulissant dans chaque activité

enter image description here

PrincipalActivity.java:

public class PrincipalActivity extends Activity { 
    public static final String ID = "id"; 
    public static final String ICON = "icon"; 
    public static final String TITLE = "title"; 
    public static final String DESCRIPTION = "description"; 

    private RelativeLayout layout; 
    private MenuLazyAdapter menuAdapter; 
    private boolean open = false; 

    private final Context context = this; 

    private ListView listMenu; 
    private TextView appName; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.principal); 
     this.listMenu = (ListView) findViewById(R.id.listMenu); 
     this.layout = (RelativeLayout) findViewById(R.id.layoutToMove); 
     this.appName = (TextView) findViewById(R.id.appName); 

     this.menuAdapter = new MenuLazyAdapter(this, MenuEventController.menuArray.size() == 0 ? MenuEventController.getMenuDefault(this) : MenuEventController.menuArray); 
     this.listMenu.setAdapter(menuAdapter); 

     this.layout.setOnTouchListener(new OnSwipeTouchListener() { 
      public void onSwipeRight() { 
       if(!open){ 
        open = true; 
        MenuEventController.open(context, layout, appName); 
        MenuEventController.closeKeyboard(context, getCurrentFocus()); 
       } 
      } 
      public void onSwipeLeft() { 
       if(open){ 
        open = false; 
        MenuEventController.close(context, layout, appName); 
        MenuEventController.closeKeyboard(context, getCurrentFocus()); 
       } 
      } 
     }); 

     this.listMenu.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       //Your intent object is null, you need set a intent to this object, 
       //like in 0 position 
       Intent intent = null; 
       if(position == 0){ 
        //action 
        //Here you need create the intent 
        //LOOK 
        intent = new Intent(PrincipalActivity.this, org.shipp.activity.Test.class); 

       } else if(position == 1){ 
        //action 
        //Here you need create the intent 
        intent = new Intent(PrincipalActivity.this, org.shipp.activity.Test2.class); 
       } else if(position == 2){ 
        //if activity is this just close menu before verify if menu is open 
        if(open){ 
         open = false; 
         MenuEventController.close(context, layout, appName); 
         MenuEventController.closeKeyboard(context, view); 
          } 
       } else if(position == 3){ 
        //Here you need create the intent 
        //intent = new Intent(this, MyNewActivity3.class); 
       } else if(position == 4){ 
        //Here you need create the intent 
        //intent = new Intent(this, MyNewActivity4.class); 
       } else if(position == 5){ 
        //Here you need create the intent 
        //intent = new Intent(this, MyNewActivity5.class); 
       } else if(position == 6){ 
        //Here you need create the intent 
        //intent = new Intent(this, MyNewActivity6.class); 
       } else if(position == 7){ 
        //Here you need create the intent 
        //intent = new Intent(this, MyNewActivity7.class); 
       } 

       //Check the position if different of current a intent are started else menu just closed 
       if(position != 2){ 
        startActivity(intent); 
        PrincipalActivity.this.finish(); 
        overridePendingTransition(R.anim.slide_left, R.anim.slide_left); 
       } 
      } 
     }); 
    } 

    public void openCloseMenu(View view){ 
     if(!this.open){ 
      this.open = true; 
      MenuEventController.open(this.context, this.layout, this.appName); 
      MenuEventController.closeKeyboard(this.context, view); 
     } else { 
      this.open = false; 
      MenuEventController.close(this.context, this.layout, this.appName); 
      MenuEventController.closeKeyboard(this.context, view); 
     } 
    } 
} 

principal.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/menu_bg" 
    tools:context=".PrincipalActivity" > 

    <include layout="@layout/actionbar_menu" android:id="@+id/actionBarMenu"/> 

    <ListView 
     android:id="@+id/listMenu" 
     android:layout_below="@+id/actionBarMenu" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:divider="#282828" 
     android:dividerHeight="1dip" 
     android:background="#3F3F3F" 
     android:fadingEdge="none" 
     android:listSelector="@drawable/list_selector"> 

    </ListView> 

    <RelativeLayout 
     android:id="@+id/layoutToMove" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/actionBar" 
     android:background="#282828"> 

     <include layout="@layout/actionbar_layout" android:id="@+id/actionBar"/> 

     <ImageButton 
      android:id="@+id/menuButton" 
      android:layout_width="48dp" 
      android:layout_height="48dp" 
      android:layout_alignBottom="@+id/actionBar" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:onClick="openCloseMenu" 
      android:src="@drawable/menu" 
      android:background="@android:color/transparent" /> 

     <Button 
      android:id="@+id/separator" 
      android:layout_width="1dp" 
      android:layout_height="50dp" 
      android:layout_toRightOf="@+id/menuButton" 
      android:background="@drawable/custom_button_black" /> 

    </RelativeLayout> 
</RelativeLayout> 

Ici, dans l'activité de test je veux aussi montrer Sliding Menu

Test.java:

public class Test extends PrincipalActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test); 
    } 
} 

test.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="186dp" 
     android:text="Test" /> 

</RelativeLayout> 

S o s'il vous plaît dites-moi comment mon code devrait ressembler, quel code je dois ajouter dans toutes mes activités pour montrer Menu coulissant.

+0

Apparaît Vous devez implémenter le tiroir de navigation. Commander [ce tutoriel] (http://developer.android.com/design/patterns/navigation-drawer.html) dessus. En outre, [cette 2013 I/O] (http://youtu.be/Jl3-lzlzOJI?t=5m15s) vidéo contient une partie avec une bonne description de son utilisation. – sandrstar

Répondre

2

Je pense que vous voudrez peut-être repenser votre conception. J'ai fait pas mal d'applications commerciales pour les clients utilisant des menus coulissants. Dans de telles applications j'ai habituellement une activité centrale, et tout le reste est des fragments, l'activité elle-même peut avoir une barre de titre, ou des tabulations, ou un menu, ou rien, mais toutes les vues complexes sont des fragments. Généralement, vous voulez que l'activité implémente les vues et les contrôles les plus courants dans tous les écrans qui auront la même fonctionnalité, quoi qu'il arrive.

Si vous devez vraiment le faire de cette façon, je suggère de créer une classe parente pour gérer toutes les fonctionnalités de glissement et d'en faire hériter vos activités nécessitant la fonctionnalité de glissement.

Dans tous les cas, vous allez vouloir utiliser des fragments, que ce soit de la bibliothèque de support, ou si vous ciblez l'API est assez élevé, seulement les réguliers.

Ensuite, ce que vous devriez examiner est de fragmenter les animations de transaction, et de changer la position des vues de fragments.

0

vous tous plus atteint, quelques changements ont besoin votre code ....

Étape 1: garder votre activité super (PrincipalActivity) ne contient que ids de menu (les ids de actionbar_layout) et des éléments (supprimer la disposition relative, liste etc voir ids)

Étape 2: supprimer la méthode de création sur votre activité super (PrincipalActivity) ...

setp 3: créer une méthode avec le nom initmenu et init les vues dans cette méthode

public void initmenu(){ 
this.listMenu = (ListView) findViewById(R.id.listMenu); 
    ... 
} 

étape 4: dans l'activité de test utiliser setContetView(R.layout.principal); étape 5: appelez la méthode initmenu() après la vue setcontet dans l'activité de test ... vous avez presque terminé maintenant ..il peut y avoir d'autres modifications que vous pouvez gérer :)

Questions connexes