年末加班基本上一周都沒什么時候回家寫代碼,回到家就想睡覺,周末難得有時間寫個博客,上次寫了一篇關於SlideMenu開源項目的導入問題,這次主要講講使用的問題,SlideMenu應用的廣泛程度就不用說了,基本上是App的標配,關於SlideMenu的各種使用方法有很多,網上各種Demo也很多,想來想去還是按照自己本身的實戰方式去寫寫吧,走過的坑希望大家基本上不會遇到,開始正題:
基礎布局
寫布局文件之前先看下最終的效果圖,昨天紅色就是滑動出現的區域,右邊的圖片由左邊的事件觸發:

activity_main.xml中的布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.slidemenu.MainActivity" >
<ListView
android:id="@+id/list_base"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</FrameLayout>
menu_frame.xml中主要是用於右邊顯示布局,單獨寫出來一個是為了方便以后的替換:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/menu_frame">
</FrameLayout>
slide_menu.xml中主要用來顯示SlideMenu中的數據,最后通過代碼區
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_slide"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
list_item中的布局文件,之后自定義的Adapter會用到:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/list_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
實例Demo
首先MainActivity導入開源項目包(如果導入有問題可以參考本人的上一篇文章)之后繼承SlidingFragmentActivity;
自定義 實例化Slide_Menu.xml的類:
public class MyMenuFragment extends Fragment implements OnItemClickListener {
private View view;
private String[] listArrStrings=new String[]{"鷹"," 鷺","火烈鳥"};
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
view=LayoutInflater.from(getActivity()).inflate(R.layout.slide_menu, null);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
ListView listView=(ListView) view.findViewById(R.id.list_slide);
listView.setAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, listArrStrings));
listView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
if(getActivity() instanceof MainActivity){
((MainActivity)getActivity()).changeImage(position);
}
}
}
onCreate中方法中調用:
super.onCreate(savedInstanceState);
setBehindContentView(R.layout.menu_frame);
setContentView(R.layout.activity_main);
slidingMenu = getSlidingMenu();
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
slidingMenu.setBehindWidth(80);
MyMenuFragment menuFragment = new MyMenuFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, menuFragment, "MyMenu").commit();
MyMenuFragment中如果回調MainActivity調用的方法:
public void changeImage(int index){
ListView view=(ListView) findViewById(R.id.list_base);
switch (index) {
case 0:
view.setAdapter(new MyListAdapter(this, R.drawable.eagle));
break;
case 1:
view.setAdapter(new MyListAdapter(this, R.drawable.heron));
break;
case 2:
view.setAdapter(new MyListAdapter(this, R.drawable.flamingo));
break;
default:
break;
}
}
最后是自定義的MyListAdapter:
public class MyListAdapter extends BaseAdapter{
private int resourceID;
private LayoutInflater inflater;
public MyListAdapter(Context context,int resId){
inflater=LayoutInflater.from(context);
resourceID=resId;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view=null;
if (convertView==null) {
view=inflater.inflate(R.layout.list_item,null);
}else{
view=convertView;
}
ImageView imageView=(ImageView) view.findViewById(R.id.list_image);
imageView.setImageResource(resourceID);
return view;
}
}
本人只是設置左滑動,其實還是設置右滑動,設置左右滑動通過setSecondaryMenu設置;
最后看下火烈鳥吧,老外還是比較愛護動物的,以上都是開源項目SlideMenu中的圖片:

