Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show Sliding Menu in each and every Activity

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.

like image 356
Sun Avatar asked Jun 25 '13 05:06

Sun


1 Answers

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.

like image 156
WIllJBD Avatar answered Sep 26 '22 22:09

WIllJBD