效果图:
Manifest.xml:
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimaryDark">@color/color_tabselected</item>//状态栏颜色
</style>
</resources>
actcivity_main2.xml(主布局):
<android.support.v4.widget.DrawerLayout 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"
android:orientation="vertical"
android:id="@+id/drawerLayout">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<!--toolbar写在主内容布局下会被侧滑菜单覆盖-->
<!--navigationIcon设置返回键图标-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_tabselected"
app:navigationIcon="@mipmap/menu"
>
</android.support.v7.widget.Toolbar>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="549dp"
android:id="@+id/viewPager_main"
></android.support.v4.view.ViewPager>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/line_bottom"
android:background="#EEEEEE"
></View>
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:tabMode="fixed"
android:id="@+id/tabLayout_bottom"
app:tabIndicatorHeight="0dp"
></android.support.design.widget.TabLayout>
</LinearLayout>
<android.support.design.widget.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/nav_menu"
app:headerLayout="@layout/nav_head"
android:scrollbars="none"
android:id="@+id/nav"
app:itemTextColor="@color/selector_menu"//设置文字颜色
app:itemIconTint="@color/selector_menu">//设置图标颜色
>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
fragment_homepage.xml(底部tablayout布局,共四个):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:tabMode="scrollable"
app:tabIndicatorColor="@color/color_tabselected"
app:tabIndicatorHeight="3dp"
app:tabTextColor="@color/color_tabdefault"
app:tabSelectedTextColor="@color/color_tabselected"
app:tabGravity="center"
app:tabTextAppearance="@style/TextSize_tab"
android:id="@+id/tabLayout_top"
>
</android.support.design.widget.TabLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/line_bottom"
android:background="#EEEEEE"
></View>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="509dp"
android:id="@+id/viewPager"></android.support.v4.view.ViewPager>
</LinearLayout>
fragment_hot.xml(顶部tablayout布局,共6个):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</LinearLayout>
tabview.xml(自定义tab视图):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:layout_width="27dp"
android:layout_height="27dp"
android:src="@drawable/tabicon_channel_default"
android:id="@+id/tabicon"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:text="频道"
android:layout_marginTop="2dp"
android:textColor="@drawable/selector_tabtitle"
android:id="@+id/tabtitle"
/>
</LinearLayout>
nav_head.xml(侧滑菜单头部布局):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="155dp"
android:orientation="vertical"
android:background="@color/color_tabselected">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/daoqi1"
android:id="@+id/profilephoto"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="道奇挑战者"
android:textSize="15sp"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:textColor="#FFFFFF"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#DDDDDD"
android:layout_marginBottom="5dp"
android:layout_marginLeft="15dp"
android:text="B币:0.0"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#DDDDDD"
android:layout_marginBottom="5dp"
android:layout_marginLeft="15dp"
android:text="硬币:0.0"
android:layout_gravity="right"
/>
</LinearLayout>
</LinearLayout>
nav_menu.xml(侧滑菜单菜单布局):
/****选择器对item无用***/
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/group1"
android:checkableBehavior="single">
<item
android:id="@+id/menu_homepage"
android:icon="@drawable/selector_tabicon_homepage"
android:title="首页"></item>
<item
android:id="@+id/menu_history"
android:icon="@drawable/selector_item_history"
android:title="历史记录"></item>
<item
android:id="@+id/menu_dowmload"
android:icon="@drawable/selector_item_download"
android:title="下载管理"></item>
<item
android:id="@+id/menu_collect"
android:icon="@drawable/selector_item_collect"
android:title="我的收藏"></item>
<item
android:id="@+id/menu_later"
android:icon="@drawable/selector_item_later"
android:title="稍后再看"></item>
<item
android:id="@+id/menu_dressup"
android:icon="@drawable/selector_item_dressup"
android:title="个性装扮"></item>
</group>
<group
android:id="@+id/group2"
android:checkableBehavior="single">
<item
android:id="@+id/menu_issue"
android:title="发布"
android:icon="@drawable/selector_item_issue"></item>
<item
android:id="@+id/menu_create"
android:title="创作中心"
android:icon="@drawable/selector_item_create"></item>
<item
android:id="@+id/hot"
android:title="热门活动"
android:icon="@drawable/selector_item_hotactivity"></item>
</group>
<group android:id="@+id/group3"
android:checkableBehavior="single">
<item
android:id="@+id/game"
android:title="游戏"
android:icon="@drawable/selector_item_game"></item>
<item
android:id="@+id/service"
android:title="客服"
android:icon="@drawable/selector_item_service"></item>
</group>
</menu>
selector_tabicon_channel.xml(tab图标选择器,共四个):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:drawable="@drawable/tabicon_channel_default"></item>
<item android:state_selected="true" android:drawable="@drawable/tabicon_channel_selected"></item>
</selector>
selecter_tabtitle.xm(tab标题颜色选择器):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@color/color_tabselected"></item>
<item android:color="@color/color_tabdefault"></item>
</selector>
MainActivity2.java:
public class MainActivity2 extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private ViewPager viewPager_main;
private List<Fragment> list_fragment = new ArrayList<>();
private TabLayout tabLayout_bottom;
private NavigationView nav;
private Toolbar toolbar;
private DrawerLayout drawerLayout;
private String[] tabtitles = {"主页", "频道", "动态", "会员购"};
private int[] tabicons = {R.drawable.selector_tabicon_homepage, R.drawable.selector_tabicon_channel, R.drawable.selector_tabicon_development, R.drawable.selector_tabicon_shopping};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initViewPager();
initToolBar();
initTablayout();
drawerLayout = findViewById(R.id.drawerLayout);
nav = findViewById(R.id.nav);
//默认选中菜单第一行
nav.setCheckedItem(R.id.menu_homepage);
nav.setNavigationItemSelectedListener(this);
}
//初始化ToolBar
private void initToolBar() {
toolbar = findViewById(R.id.toolbar);
//用toolbar代替actionbar
setSupportActionBar(toolbar);
//使返回按钮可点击
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
//隐藏标配
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
//初始化viewpager
private void initViewPager() {
viewPager_main = findViewById(R.id.viewPager_main);
list_fragment.add(new HomepageFragment());
list_fragment.add(new ChannelFragment());
list_fragment.add(new DevelopmentFragment());
list_fragment.add(new ShoppingFragment());
MainActivityAdapter mainActivityAdapter = new MainActivityAdapter(getSupportFragmentManager(), list_fragment);
viewPager_main.setAdapter(mainActivityAdapter);
}
//初始化tablayout
private void initTablayout() {
LayoutInflater inflater = LayoutInflater.from(this);
tabLayout_bottom = findViewById(R.id.tabLayout_bottom);
//为tab设置自定义视图
for (int i = 0; i < tabicons.length; i++) {
TabLayout.Tab tab = tabLayout_bottom.newTab();
View view = inflater.inflate(R.layout.tabview, null);
//为tab设置自定义视图
tab.setCustomView(view);
TextView tabtitle = (TextView) view.findViewById(R.id.tabtitle);
tabtitle.setText(tabtitles[i]);
ImageView tabicon = (ImageView) view.findViewById(R.id.tabicon);
tabicon.setImageResource(tabicons[i]);
//添加tab
tabLayout_bottom.addTab(tab);
//关联tablyout
viewPager_main.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout_bottom));
tabLayout_bottom.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//取消viewpager滑动效果
viewPager_main.setCurrentItem(tab.getPosition(), false);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
//点击返回键弹出侧滑菜单
if (item.getItemId() == android.R.id.home) {
drawerLayout.openDrawer(GravityCompat.START);
}
return true;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_history:
Intent intent = new Intent(this,HistoryActivity.class);
startActivity(intent);
break;
}
return true;
}
}
MainActivityAdapter.java:
public class MainActivityAdapter extends FragmentPagerAdapter {
private List<Fragment> list_fragment;
public MainActivityAdapter(FragmentManager fragmentManager,List<Fragment> list_fragment){
super(fragmentManager);
this.list_fragment = list_fragment;
}
@Override
public Fragment getItem(int i) {
return list_fragment.get(i);
}
@Override
public int getCount() {
return 4;
}
}
HomePageFragment.java:
public class HomepageFragment extends Fragment {
private String[] tabtitles_top = {"直播", "推荐", "热门", "追番", "影视", "抗击肺炎"};
private List<Fragment> list_fragment1 = new ArrayList<>();
private TabLayout tabLayout_top;
private ViewPager viewPager;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_homepage, container, false);
viewPager = view.findViewById(R.id.viewPager);
tabLayout_top = view.findViewById(R.id.tabLayout_top);
HomepageFragmentAdapter homepageFrgementAdapter = new HomepageFragmentAdapter(getChildFragmentManager(), tabtitles_top);
viewPager.setAdapter(homepageFrgementAdapter);
//tablayout绑定viewpager
tabLayout_top.setupWithViewPager(viewPager);
return view;
}
}
HomepageFragmentAdapter.java:
public class HomepageFragmentAdapter extends FragmentPagerAdapter {
private String[] tabtitles_top;
public HomepageFragmentAdapter(FragmentManager fm, String[] tabtitles_top) {
super(fm);
this.tabtitles_top = tabtitles_top;
}
@Override
public Fragment getItem(int i) {
Fragment fragment = null;
switch (i) {
case 0:
fragment = new LiveFragment();
break;
case 1:
fragment = new RecommendFragment();
break;
case 2:
fragment = new HotFragment();
break;
case 3:
fragment = new SeriesFragment();
break;
case 4:
fragment = new FilmFragment();
break;
case 5:
fragment = new FightFragment();
break;
}
return fragment;
}
@Override
public int getCount() {
return 6;
}
//获得tab标题
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabtitles_top[position];
}
}
HotFragment.java:
public class HotFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_hot, container, false);
return view;
}
}