侧滑菜单栏+viewpager+tablayout+fragment
在开发过程中,经常会搭建这样一个布局,请看图
有没有觉得很实用,下面就来一起看这个环境是如何搭建的吧
首先是XML布局
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 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.a13683.buju.MainActivity"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> !!!在这个地方请注意,要添加依赖(使用TabLayout是5.0的新特性,编译版本小于5.0要添加依赖) <android.support.design.widget.TabLayout android:id="@+id/tab" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <fragment !!!这个地方请注意:我设置的是左滑菜单栏,你可以尝试一下其他的,这里就要建一个Fragment, 因为其中没内容,我就不写了。 class="com.example.a13683.buju.BlankFragment" android:layout_gravity="start" android:layout_width="180dp" android:layout_height="match_parent"> </fragment> </android.support.v4.widget.DrawerLayout>
MainActivity
package com.example.a13683.buju; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MenuItem; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private DrawerLayout draw; private TabLayout tabLayout; private ViewPager viewPager; private ActionBarDrawerToggle barDrawerToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 InitKongjian(); // 初始化ActionBar InitBar(); //初始化ViewPager InitPager(); } private void InitPager() { //1创建一个集合,用来装Fragment ArrayList<Fragment> list = new ArrayList<Fragment>(); //2.将Fragment对象放入集合显示 1想实现几个fragment就写几个 list.add(new class1()); list.add(new class2()); 这里的类都要创建,同时创建布局 list.add(new class3()); //3.适配 MyBase base = new MyBase(getSupportFragmentManager()); //将集合传给适配器 base.setFragments(list); //给viewpager设置适配器 viewPager.setAdapter(base); //4.tablayout的指示器有几个就创建几个,我有三个 tabLayout.addTab(tabLayout.newTab()); tabLayout.addTab(tabLayout.newTab()); tabLayout.addTab(tabLayout.newTab()); //5.使得tablayout与viewpager相关联 tabLayout.setupWithViewPager(viewPager); //6.给tablayout指示器设置文本 2,同时改变的还有这个地方 tabLayout.getTabAt(0).setText("今日看点"); tabLayout.getTabAt(1).setText("朝闻天下"); tabLayout.getTabAt(2).setText("购物广场"); } private void InitKongjian() { draw = (DrawerLayout) findViewById(R.id.activity_main); tabLayout = (TabLayout) findViewById(R.id.tab); viewPager = (ViewPager) findViewById(R.id.pager); } private void InitBar() { //1获取一个Actionbar对象 ActionBar bar = getSupportActionBar(); //2添加一个返回图标 bar.setDisplayHomeAsUpEnabled(true); //3关联 //这个类提供了一个方便的方式来绑定功能 参数 上下文,drawerlayout 资源(盲人点击时,会发出声音) barDrawerToggle = new ActionBarDrawerToggle(this, draw, R.string.open, R.string.close); //将抽屉指示器的状态与连接的Drawablelayout同步状态 barDrawerToggle.syncState(); draw.addDrawerListener(barDrawerToggle); } @Override public boolean onOptionsItemSelected(MenuItem item) { if(barDrawerToggle.onOptionsItemSelected(item)){ return true; } return super.onOptionsItemSelected(item); } }
适配器
package com.example.a13683.buju; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import java.util.List; public class MyBase extends FragmentPagerAdapter { public MyBase(FragmentManager fm) { super(fm); } private List<Fragment> mfragments; public void setFragments(List<Fragment> fragments){ mfragments = fragments; } @Override public Fragment getItem(int position) { Fragment fragment = mfragments.get(position); return fragment; } @Override public int getCount() { return mfragments.size(); } }
整个搭建环境的过程大约就是这样,感兴趣的可以再完善一下这个代码。