2013-06-25 9 views
8

Pracuję z facebookiem, np. Z menu przesuwania, ale mam do czynienia z małym problemem, nie wiem, jak dodać menu przesuwania w każdej aktywności, np. Wyświetlanie menu w PrincipalActivity tak:Jak wyświetlić menu przesuwania w każdym działaniu

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> 

Tutaj aktywności testowym Chcę również pokazać przesuwne 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 proszę, powiedz mi, jak powinien wyglądać mój kod, jaki kod muszę dodać w mojej całej działalności, aby pokazać menu przesuwania w postaci .

+0

Wydaje się, że musisz zaimplementować szufladę nawigacyjną. Kasa [ten samouczek] (http://developer.android.com/design/patterns/navigation- drawer.html) na jej temat. Ponadto wideo z [tego 2013 I/O] (http://youtu.be/Jl3-lzlzOJI?t=5m15s) zawiera część z dobrym opisem jego użycia. – sandrstar

Odpowiedz

2

Myślę, że warto przemyśleć swój projekt. Zrobiłem sporo komercyjnych aplikacji dla klientów korzystających z przesuwanych menu. W takich aplikacjach zazwyczaj mam główną aktywność, a wszystko inne to fragmenty, sama czynność może mieć pasek tytułu, karty lub menu albo nic, ale wszystkie złożone widoki są fragmentami. Ogólnie rzecz biorąc, chcesz, aby ta aktywność implementowała najbardziej popularne widoki i elementy sterujące na wszystkich ekranach, które będą miały tę samą funkcjonalność bez względu na wszystko.

Jeśli naprawdę musisz to zrobić w ten sposób, proponuję stworzyć klasę dla rodziców, która poradzi sobie ze wszystkimi funkcjami przesuwnymi, a Twoje działania, które wymagają funkcji przesuwnej, będą z niej dziedziczyć.

W każdym przypadku będziesz chciał użyć fragmentów, niezależnie od tego, czy pochodzą one z biblioteki pomocy technicznej, czy też masz odpowiedni interfejs API, tylko te zwykłe.

Następnie należy zajrzeć do animacji transakcji fragmentów i zmienić pozycję widoków fragmentów.

0

wszyscy najbardziej osiągnięty, kilka zmian potrzeba w was kodu ....

Krok 1: zachować swoją super-aktywność (PrincipalActivity) zawiera tylko identyfikatory menu (IDS actionbar_layout użytkownika) oraz elementy (wyjąć układ względny, listy zobaczyć etc iDS)

Krok 2: usunąć metodę na stworzenie w swoim super-aktywność (PrincipalActivity) ...

SEtP 3: stworzenie metody z nazwą initmenu i init poglądy w tej metodzie

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

krok 4: w działaniu testowym użyj setContetView(R.layout.principal); krok 5: wywołaj metodę initmenu() po widoku setcontet w działaniu testowym ... już prawie skończyłeś ..może być więcej zmian, które możesz obsłużyć :)

Powiązane problemy