如何在每个活动中显示滑动菜单

我正在使用像滑动菜单的脸谱,但我面临一个小问题,不知道如何在每一个活动中添加滑动菜单,如显示如下的PrincipalActivity菜单:

在这里输入图像说明

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> 

在testing活动中,我也想显示滑动菜单

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> 

所以请告诉我我的代码应该是什么样子,我需要添加什么代码在我的所有活动中显示滑动菜单。

Solutions Collecting From Web of "如何在每个活动中显示滑动菜单"

我想你可能想重新考虑你的devise。 我为使用滑动菜单的客户做了不less商业应用程序。 在这样的应用程序中,我通常有一个中心活动,其他都是片段,活动本身可能有一个标题栏,标签或菜单,或者什么都不是,但所有复杂的视图都是片段。 一般而言,您希望活动在所有屏幕中实现最常见的视图和控件,而无论这些屏幕具有相同的function。

如果你真的必须这样做,我build议做一个父类来处理所有的滑动function,并让你的活动需要从它inheritance的滑动function。

无论如何,你将要使用片段,无论是从支持库,还是如果你的目标API足够高,只是普通的。

那么你应该看看什么是片段事务animation,并改变片段视图的位置。

你所有的人都到达了,你需要一些改变代码….

第一步:保持你的超级活动( PrincipalActivity )只包含菜单ID(actionbar_layout的ID)和元素(删除相对布局,列表视图等ids)

第2步:删除超级活动( PrincipalActivity )中的创build方法…

setp 3:创build一个名为initmenu的方法,并初始化该方法中的视图

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

第四步:在testing活动中使用setContetView(R.layout.principal); 第5步:在testing活动中的setcontet视图之后调用initmenu()方法…你现在差不多完成了..可能还有一些更改可以处理:)