1.MainActivity
package com.example.practice;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
private ActionBarDrawerToggle toggle;
private DrawerLayout drawerLayout;
private ViewPager contents;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState==null){
//添加左滑动视图
getSupportFragmentManager().beginTransaction().add(R.id.left_drawer,new LeftFragment()).commit();
}
initView();
}
private void initView() {
//开启ActionBar左边的icon
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
drawerLayout = findViewById(R.id.drawer);
toggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close);
//同步设置,在滑动切换主页面和左滑动视图时,标题栏也跟着改变
toggle.syncState();
drawerLayout.addDrawerListener(toggle);
contents = findViewById(R.id.contents);
contents.setAdapter(new MainPageAdapter(getSupportFragmentManager()));
TabLayout tabLayout = findViewById(R.id.bottom_indicator);
//使tabLayout和contents结合起来
tabLayout.setupWithViewPager(contents);
}
//点击侧滑里面的条目显示对应的fragment
public void showPage(int position) {
contents.setCurrentItem(position);
drawerLayout.closeDrawer(Gravity.START);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
@SuppressLint("WrongViewCast") DrawerLayout drawer = (DrawerLayout) findViewById(R.id.left_drawer);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
}
2.HomePagerAdapter 页面
package com.example.practice;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class HomePagerAdapter extends FragmentPagerAdapter {
//定义tabLayout的切换内容
private String[] pageNames=new String[]{"推荐","小视频","视频","热点","北京","娱乐","财经","军事"};
public HomePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
//给Fragment对应的TabLayout赋值
switch (i){
case 0:
return new RecommendFragment();
default:
return new BaseFragment();
}
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
//获取当前TabLayout的内容
return pageNames[position];
}
//获取tabLayout的数组长度
@Override
public int getCount() {
return pageNames.length;
}
}
3.BaseFragment 页面—TabLayout被复用的页面
package com.example.practice;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView=new TextView(getActivity());
textView.setText("页面");
return textView;
}
}
VideoFragment 页面----视频Fragment
package com.example.practice;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class VideoFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView=new TextView(getActivity());
textView.setText(getClass().getSimpleName());
return textView;
}
}
MineFragment 页面----我的Fragment
package com.example.practice;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MineFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView=new TextView(getActivity());
textView.setText(getClass().getSimpleName());
return textView;
}
}
RecommendFragment 页面—TabLayout推荐页面
package com.example.practice;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class RecommendFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView=new TextView(getActivity());
textView.setText("推荐");
return textView;
}
}
MainPageAdapter ----主页适配器
package com.example.practice;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MainPageAdapter extends FragmentPagerAdapter {
private String[] menus=new String[]{
"首页","视频","我的"
};
public MainPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i){
case 0:
return new HomeFragment();
case 1:
return new VideoFragment();
case 2:
return new MineFragment();
default:
return new Fragment();
}
}
//获取Fragment长度
@Override
public int getCount() {
return menus.length;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return menus[position];
}
}
LeftMenuAdapter 页面----侧滑Fragment适配器
package com.example.practice;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class LeftMenuAdapter extends BaseAdapter {
//定义数组
private String[] menus=new String[]{
"首页","视频","我的"
};
private Context context;
public LeftMenuAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return menus.length+1;
}
private final int ITEM_COUTN=2;
private final int IMAGE_TYPE=0;
private final int TEXT_TYPE=1;
@Override
public int getViewTypeCount() {
return ITEM_COUTN;
}
@Override
public int getItemViewType(int position) {
return position==0?IMAGE_TYPE:TEXT_TYPE;
}
@Override
public String getItem(int position) {
if (position==0){
return null;
}
return menus[position-1];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView==null){
convertView=LayoutInflater.from(context).inflate(
getItemViewType(position)==IMAGE_TYPE?R.layout.menu_image_item:R.layout.menu_text_item
,parent,false
);
holder=new ViewHolder(convertView);
}else {
holder= (ViewHolder) convertView.getTag();
}
if (getItemViewType(position)==TEXT_TYPE){
holder.bindData(getItem(position));
}
return convertView;
}
class ViewHolder{
ImageView imageView;
TextView textView;
public ViewHolder(View itemView) {
imageView=itemView.findViewById(R.id.icon);
textView=itemView.findViewById(R.id.text);
itemView.setTag(this);
}
public void bindData(String text){
textView.setText(text);
}
public void displayIcon(){
}
}
}
LeftFragment 页面----侧滑Fragment
package com.example.practice;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
public class LeftFragment extends Fragment {
private ListView menus;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_left_drawer,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
menus=view.findViewById(R.id.menus);
menus.setAdapter(new LeftMenuAdapter(getActivity()));
//listView点击事件
menus.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position==0){
return;
}
((MainActivity)getActivity()).showPage(position-1);
}
});
}
}
HomeFragment 页面----首页Fragment
package com.example.practice;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class HomeFragment extends Fragment {
private TabLayout tabLayout;
private ViewPager contents;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tabLayout=view.findViewById(R.id.top_indicator);
contents=view.findViewById(R.id.contents);
//ViewPager设置适配器
contents.setAdapter(new HomePagerAdapter(getChildFragmentManager()));
同步TabLayout和ViewPager
tabLayout.setupWithViewPager(contents);
}
}
activity_main.xml页面
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- 内容布局 菜单布局: layout_gravity -->
<!-- match_parent 根据父布局适应 wrap_content 根据内容适应 -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/bottom_indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:tabTextColor="@color/colorPrimary"
app:tabSelectedTextColor="@color/colorAccent"
app:tabIndicatorColor="@android:color/transparent"
app:tabIndicatorHeight="1dp"
/>
<!-- app:tabTextAppearance="" -->
<android.support.v4.view.ViewPager
android:id="@+id/contents"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottom_indicator"/>
</RelativeLayout>
<FrameLayout
android:id="@+id/left_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#ffffff" />
</android.support.v4.widget.DrawerLayout>
fragment_home.xml页面
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- 填充是 0dp,并根据约束来做 -->
<android.support.design.widget.TabLayout
android:id="@+id/top_indicator"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:tabMode="scrollable"
/>
<android.support.v4.view.ViewPager
android:id="@+id/contents"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/top_indicator"
app:layout_constraintBottom_toBottomOf="parent"/>
</android.support.constraint.ConstraintLayout>
fragment_left_drawer.xml页面
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menus"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
menu_image_item.xml页面
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/icon"
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:src="@mipmap/ic_launcher"/>
</android.support.constraint.ConstraintLayout>
menu_text_item.xml页面
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"/>