2013-06-25 13 views
8

Sto lavorando con Facebook come il menu scorrevole, ma sto affrontando un piccolo problema, non so come aggiungere il menu scorrevole in ogni singola attività, come mostrare il menu in PrincipalActivity in questo modo:Come mostrare il menu scorrevole in ogni singola attività

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> 

Qui in Test Attività Voglio anche mostrare 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 per favore dimmi come dovrebbe essere il mio codice, quale codice devo aggiungere in tutte le mie attività per mostrare il menu scorrevole .

+0

Sembra necessario implementare il Navigatore. Checkout [questo tutorial] (http://developer.android.com/design/patterns/navigation-drawer.html) su di esso. Inoltre, [questo 2013 I/O] (http://youtu.be/Jl3-lzlzOJI?t=5m15s) video contiene parte con una buona descrizione del suo utilizzo. – sandrstar

risposta

2

Penso che potresti voler ripensare il tuo design. Ho creato alcune app commerciali per i clienti che usano i menu scorrevoli. In tali app di solito ho un'attività centrale, e tutto il resto sono frammenti, l'attività stessa potrebbe avere una barra del titolo, o schede, o un menu, o nulla, ma tutte le viste complesse sono frammenti. In generale, si desidera che l'attività implementa le visualizzazioni e i controlli più comuni in tutte le schermate che avranno la stessa funzionalità indipendentemente da cosa.

Se davvero si deve fare in questo modo, suggerisco di creare una classe genitore per gestire tutte le funzionalità di scorrimento e di ereditare le attività che richiedono la funzionalità di scorrimento.

In ogni caso, si desidera utilizzare i frammenti, sia dalla libreria di supporto, sia se l'API di destinazione è sufficientemente alta, solo quelli regolari.

Quindi è necessario esaminare le animazioni delle transazioni frammento e modificare la posizione delle viste dei frammenti.

0

tutti voi più raggiunto, alcune modifiche devono in voi codice ....

Fase 1: mantenere la vostra attività di super (PrincipalActivity) contiene solo gli ID di menu (IDS di actionbar_layout) ed elementi (rimuovere il layout relativo, la lista visualizzare ecc ids)

Fase 2: rimuovere il metodo sul creare nella vostra eccellente attività (PrincipalActivity) ...

setp 3: creare un metodo con il nome initmenu e init i punti di vista in quel metodo

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

Fase 4: in uso attività di test setContetView(R.layout.principal); passo 5: chiamare initmenu() metodo dopo aver vista setcontet in attività di test ... quasi fatto ora ..potrebbero esserci altre modifiche che è possibile gestire :)

Problemi correlati