把这个设置给SlidingMenu的setMenu(),一会用下面的布局来替换这个
<?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">
<RelativeLayout
android:id="@+id/slidingMenuLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</LinearLayout>
//用来替换上面这个SlidingMenu布局的Fragment
<?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="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#0ff0b8">
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#ff00ee">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#a1eb0d">
</LinearLayout>
</LinearLayout>
下面是MainActivity的代码
public class MainActivity extends AppCompatActivity {
private ViewPager viewpager;
private TabLayout tablayout;
private SlidingMenu menu;
private ImageView handimg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//头部的图片,点击可以页实现侧拉菜单弹出
handimg = (ImageView) findViewById(R.id.handerimg);
viewpager = (ViewPager) findViewById(R.id.viewpager);
tablayout = (TabLayout) findViewById(R.id.tablayout);
//viewpager设置自定义适配器
viewpager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()));
//让tablayout和viewpager关联起来
tablayout.setupWithViewPager(viewpager);
//初始化侧拉菜单
InitSlidingMenu();
//下面这种方法也可以添加tablayout里面的textview内容,或者在适配器哪里用集合数组添加名字
/* TabLayout.Tab tab1 = tablayout.newTab();
TabLayout.Tab tab2 = tablayout.newTab();
TabLayout.Tab tab3 = tablayout.newTab();
tab1.setText("头条");
tab2.setText("新闻");
tab3.setText("北京");
tablayout.addTab(tab1);
tablayout.addTab(tab2);
tablayout.addTab(tab3);*/
}
//自定义方法 设置侧拉菜单
private void InitSlidingMenu() {
//初始化对象
menu = new SlidingMenu(MainActivity.this);
//设置SlidingMenu位置在左侧
menu.setMode(SlidingMenu.LEFT);
//设置侧拉出来以后距离另外一侧边框的距离
menu.setBehindOffset(300);
/**
* 设置可以划出测拉菜单的位置,
* TOUCHMODE_FULLSCREEN 是全屏任何位置都可以划出
* TOUCHMODE_MARGIN 是设置只能在左侧边缘或者右侧边缘划出,根据上面设置的setMode()方向决定
* 如果和ViewPager一起使用建议使用:TOUCHMODE_MARGIN
*/
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
//设置划出菜单以后,主Activity剩余的位置变成暗黑色
menu.setOffsetFadeDegree(0.5f);
//设置侧拉菜单回去的时候褪色
menu.setFadeDegree(1.0f);
// 让侧拉菜单和Activity关联
menu.attachToActivity(MainActivity.this, SlidingMenu.SLIDING_CONTENT);
//设置侧拉菜单的布局文件
menu.setMenu(R.layout.slidingmenu_layout);
//用另外一个Fragment来替换
getSupportFragmentManager().beginTransaction()
.replace(R.id.slidingMenuLayout, new SlidingMenuListViewFragment(new SlidingMenuListViewFragment.ItemOnClick() {
@Override
public void OnClick(int position) {
System.out.println("传过来的下标值" + position);
viewpager.setCurrentItem(position);
//关闭侧拉菜单
menu.toggle();
}
}))
.commit();
//设置点击头部布局的图片显示SlidingMenu菜单
handimg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//这个方法是自定打开或关闭侧拉菜单
menu.toggle();
}
});
}
}
这个是实际的SlidingMenu的Fragment布局,中间放了一个ListView,简单设置适配器,点击Item跳转到主界面ViewPager响应的item页面,
public class SlidingMenuListViewFragment extends Fragment {
private View view;
private ListView listview;
private String[] str;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
view = View.inflate(getContext(), R.layout.slidingmenu_fragment, null);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
str = new String[]{"推荐", "热点", "北京", "视频集锦", "社会", "美女图片", "娱乐", "问答"};
listview = (ListView) view.findViewById(R.id.listview);
listview.setAdapter(new MyBaseAdapter());
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
itemOnClick.OnClick(position);
}
});
}
//自定义接口用于item点击的时候传值,传当前点击的Position
public interface ItemOnClick {
void OnClick(int position);
}
private ItemOnClick itemOnClick;
public SlidingMenuListViewFragment(ItemOnClick itemOnClick) {
this.itemOnClick = itemOnClick;
}
class MyBaseAdapter extends BaseAdapter {
@Override
public int getCount() {
return str.length;
}
@Override
public Object getItem(int position) {
return str[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(getContext(), R.layout.listview_item, null);
holder = new ViewHolder();
holder.img = (ImageView) convertView.findViewById(R.id.item_img);
holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv.setText(str[position]);
holder.img.setImageResource(R.mipmap.ic_launcher_round);
return convertView;
}
}
class ViewHolder {
ImageView img;
TextView tv;
}
}
下面这个是Activity页面的ViewPager里面的Fragment的适配器
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
String[] str = new String[]{"推荐", "热点", "北京", "视频集锦", "社会", "美女图片", "娱乐",
"问答", "汽车时尚", "财经频道"};
/**
* 上面的tablayout滑动,把标题名字传给Fragment里面的textView显示
*/
@Override
public Fragment getItem(int position) {
MyFragment myFragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("text", str[position]);
myFragment.setArguments(bundle);
return myFragment;
}
@Override
public int getCount() {
return str.length;
}
//这个方法是设置tablayout上面显示的标题名字
@Override
public CharSequence getPageTitle(int position) {
return str[position];
}
}
下面这个是ViewPager里面的Fragment,用传过来的值设置TextView,里面只有TextView简单布局
public class MyFragment extends Fragment {
private View view;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle
savedInstanceState) {
view = View.inflate(getContext(), R.layout.myfragment, null);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView tv = (TextView) view.findViewById(R.id.fragment_tv);
//得到传值对象,系统自带的方法
Bundle bundle = getArguments();
String text = bundle.getString("text");
//把传过来的信息设置到TextView上面
tv.setText(text);
}
}