How to show Sliding Menu in each and every Activity
Asked Answered
A

2

8

I am working with facebook like Sliding Menu, but i am facing a small problem, don't know how to add Sliding Menu in each and every Activity, like showing menu in PrincipalActivity like this:

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>

Here in Test Activity i also want to show 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>

So please tell me how my code should look like, what code i need to add in my all activity's to show Sliding Menu.

Angeliaangelic answered 25/6, 2013 at 5:25 Comment(1)
Seems You need to implement Navigation Drawer. Checkout this tutorial on it. Also, this 2013 I/O video contains part with good description of its usage.Beene
C
2

I think you may want to rethink your design. I have made quite a few commercial apps for clients using sliding menus. In such apps I usually have a central activity, and all else is fragments, the activity itself might have a title bar, or tabs, or a menu, or nothing, but all the complex views are fragments. Generally you want to have the activity implement the most common views and controls in all the screens that will have the same functionality no matter what.

If you really must do it this way I suggest making a parent class to deal with all the sliding functionality, and have your activities that need the sliding functionality inherit from it.

In any case you are going to want to use fragments, whether from the support library, or if you target API is high enough, just the regular ones.

Then what you should look into is fragment transaction animations, and changing the position of the fragments views.

Constellation answered 25/6, 2013 at 6:3 Comment(0)
C
0

you all most reached, a few changes need in you code ....

Step 1: keep your super activity (PrincipalActivity) only contains menu ids (actionbar_layout's ids) and elements (remove relative layout , list view etc ids)

Step 2: remove the on create method in your super activity (PrincipalActivity)...

setp 3: create a method with name initmenu and init the views in that method

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

step 4: in test activity use setContetView(R.layout.principal); step 5: call initmenu() method after setcontet view in test activity ... you almost done now.. there may be some more changes you can handle :)

Collyer answered 25/6, 2013 at 6:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.