2013-06-25 36 views
8

Tôi đang làm việc với facebook như Menu Trượt, nhưng tôi đang gặp phải một vấn đề nhỏ, không biết cách thêm Menu Trượt trong mỗi Hoạt động, như hiển thị menu trong PrincipalActivity như thế này:Cách hiển thị Menu Trượt trong mỗi Hoạt động

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> 

Ở Hoạt động thử nghiệm tôi cũng muốn thể hiện trượt 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 vui lòng cho tôi biết mã của tôi trông như thế nào, mã nào tôi cần thêm vào tất cả hoạt động của mình để hiển thị Menu trượt.

+0

Có vẻ Bạn cần triển khai Navigation Drawer. Thanh toán [hướng dẫn này] (http://developer.android.com/design/patterns/navigation-drawer.html) trên đó. Ngoài ra, [2013 I/O] (http://youtu.be/Jl3-lzlzOJI?t=5m15s) video này chứa một phần mô tả tốt về cách sử dụng của video. – sandrstar

Trả lời

2

Tôi nghĩ bạn có thể muốn suy nghĩ lại về thiết kế của mình. Tôi đã thực hiện khá một vài ứng dụng thương mại cho khách hàng bằng cách sử dụng các menu trượt. Trong các ứng dụng như vậy, tôi thường có một hoạt động trung tâm, và tất cả những thứ khác là các mảnh, bản thân hoạt động có thể có thanh tiêu đề hoặc các tab hoặc menu hoặc không có gì, nhưng tất cả các khung nhìn phức tạp đều là các đoạn. Nói chung, bạn muốn có hoạt động thực hiện các chế độ xem và điều khiển phổ biến nhất trong tất cả các màn hình sẽ có cùng chức năng bất kể điều gì.

Nếu bạn thực sự phải thực hiện theo cách này, tôi khuyên bạn nên tạo lớp cha để xử lý tất cả chức năng trượt và có các hoạt động cần chức năng trượt kế thừa từ đó.

Trong mọi trường hợp, bạn sẽ muốn sử dụng phân đoạn, cho dù từ thư viện hỗ trợ hay nếu bạn nhắm mục tiêu API đủ cao, chỉ là các định dạng thông thường.

Sau đó, những gì bạn nên xem xét là hoạt ảnh giao dịch phân đoạn và thay đổi vị trí của các lượt xem phân đoạn.

0

bạn tất cả đạt nhất, một vài thay đổi cần thiết trong bạn mã ....

Bước 1: giữ cho hoạt động siêu của bạn (PrincipalActivity) chỉ chứa id menu (id actionbar_layout) và các yếu tố (loại bỏ bố trí tương đối, danh sách xem vv id)

Bước 2: loại bỏ các phương pháp trên tạo trong hoạt động siêu của bạn (PrincipalActivity) ...

setp 3: tạo ra một phương pháp với tên initmenu và init quan điểm trong phương pháp mà

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

bước 4: trong hoạt động thử nghiệm sử dụng setContetView(R.layout.principal); bước 5: gọi phương thức initmenu() sau khi xem setcontet trong hoạt động kiểm tra ... bạn gần như đã hoàn tất ngay bây giờ ..có thể có một số thay đổi khác mà bạn có thể xử lý :)

Các vấn đề liên quan