tablelayout 和view pager 底部菜单添加文字和图片(view)方法

来源:互联网 发布:迷你小钢炮淘宝地址 编辑:程序博客网 时间:2024/06/08 01:26
1. 先创建图片和文字的选择器view,并建立xml  tab文件,添加imageview和textview组件,此视图为加入到tablayout中的视图,会在adapter中将其与选择器绑定
代码如下:
<ImageView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/tab_iv1"/><TextView    android:textSize="15sp"    android:gravity="center"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textColor="@drawable/text_selector"    android:id="@+id/tab_tv1"    />
  2.建立文字和图片的选择器  selector格式文件
文字代码:
<!-- 未选中时字体颜色--><item android:state_selected="false"    android:color ="#9E9E9E" ></item><!-- 选中时字体颜色--><item    android:state_selected="true"    android:color="#7CCD7C"/><!-- 非触摸模式下获得焦点并单击时的字体颜色 --><item    android:state_focused="true"    android:state_pressed="true"
   android:color="#7CCD7C"/>
图片代码如下:
<!-- 被选择时图片--> <item android:drawable="@mipmap/og"     android:state_selected="true"> </item> <!-- 未选择时图片--> <item android:drawable="@mipmap/of">
</item>
3.在adapter中建立两个数组 一为String类型,数组成员为菜单名称, 另一数组为int类型.成员为菜单图片ID 创建一个自定义方法,返回值为view  所以需要context添加view视图view为上文建立的xml视图 将两个数组设置到视图里的组件上  代码如下:
public class SendViewPagerAdapter extends FragmentPagerAdapter {    private ArrayList<Fragment> datas;//因为要用将fragment加入到viewpager之中,所以内容为fragment类型的集合    private Context context;    String title1 = "拨号";    String title2 = "最近通话";    String title3 = "联系人";    String title4 = "短信";    String [] titles = {title1,title2,title3,title4};//设置底部tablayoutout显示文字    private int [] imageviewId = {R.drawable.send_selector,R.drawable.call_history_selector,R.drawable.call_person_selector,R.drawable.message_selector};    public SendViewPagerAdapter(FragmentManager fm, ArrayList<Fragment> datas,Context context) {//设置构造函数,将fragment传入到viewpager中        super(fm);        this.datas = datas;        this.context = context;    }    @Override    public Fragment getItem(int position) {        return datas.get(position);    }    @Override    public int getCount() {        return datas.size();    }    @Override//tablayout和viewpager结合之后,创建底部title使用的方法    public CharSequence getPageTitle(int position) {        return null;    }    public View getTabView(int position) {        View view = LayoutInflater.from(context).inflate(R.layout.main_tab, null);        TextView textview = (TextView) view.findViewById(R.id.tab_tv1);        ImageView imageview = (ImageView) view.findViewById(R.id.tab_iv1);        textview.setText(titles[position]);        imageview.setImageResource(imageviewId[position]);        return view;    }
}
4.主函数代码如下:
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        datas = new ArrayList<>();        datas.add(new SendFragment());//将几个fragment加入datas中,data为fragment类型的集合        datas.add(new CallHistoryFragment());        datas.add(new ContactPersonFragment());        datas.add(new MessageFragment());        viewpager = (ViewPager) findViewById(R.id.viewpager);//绑定viewpager        tablayout = (TabLayout) findViewById(R.id.tablayout);//绑定tablayout        adapter = new SendViewPagerAdapter(getSupportFragmentManager(), datas,this);//初始化fragment类型adapter,datas为adapter构造函数参数        viewpager.setAdapter(adapter);//将adapter加入viewpager中//        tablayout.setTabTextColors(Color.BLUE,Color.GREEN);        //加入title选择和被选择的颜色,前面为未点击的颜色,后面为点击后的颜色        tablayout.setupWithViewPager(viewpager);//将tablayout与viewpager建立关系        for(int i = 0;i < tablayout.getTabCount();i++){//判断tablayout有几个菜单数量            TabLayout.Tab tab = tablayout.getTabAt(i);            if (tab != null){                tab.setCustomView(adapter.getTabView(i));//将adapter设置好的获取图片和文字的方法设置到视图中            }        }        viewpager.setCurrentItem(1);    }}
0 0
原创粉丝点击