其实我想实现这样的效果,但发现我咋都百度不出来,所以还是分享自己的劳动成果把。
效果图

tablayout +viewpage的实现网上有很多,我就不说了,这里主要是实现一下自定义tab并实现上图那样的效果。

难点一:去除tab之间的间距(主要代码是tabpadding的那四行)

   <android.support.design.widget.TabLayoutandroid:id="@+id/comment_tab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:padding="-1dp"app:tabIndicatorColor="@color/blue_cloud_scheme"app:tabPaddingBottom="-1dp"app:tabPaddingEnd="-1dp"app:tabPaddingStart="-1dp"app:tabPaddingTop="-1dp"app:tabSelectedTextColor="@color/blue_cloud_scheme"app:tabTextColor="#FF000000"app1:tabGravity="fill"app1:tabIndicatorHeight="0dp"app1:tabMode="fixed" />

难点二:两个tab的圆角位置是不同的,所以我们需要创建两个自定义view。

下面是完整代码

1.创建tablayout的布局(上面难点一那个)。
2.实现Activity。

//一定要继承FragmentActivity
public class Activity extends FragmentActivity {private List<Fragment> datas;// 数据源private List<String> titles;private TabLayout tab;private ViewPager viewPage;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_detail);initDatas();initView();}
//添加两个tab的名称,和两个子fragment。private void initDatas() {datas = new ArrayList<Fragment>();titles = new ArrayList<String>();datas.add(new FragmentA(Activity.this));datas.add(new FragmentB(Activity.this));titles.add("电桩详情");titles.add("充电终端");}
private void initView() {// TODO Auto-generated method stubtab = (TabLayout) findViewById(R.id.comment_tab);viewPage = (ViewPager) findViewById(R.id.comment_viewpager);tab.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Overridepublic void onTabSelected(TabLayout.Tab tab1) {viewPage.setCurrentItem(tab1.getPosition());}@Overridepublic void onTabUnselected(TabLayout.Tab tab1) {}@Overridepublic void onTabReselected(TabLayout.Tab tab1) {}});FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(getSupportFragmentManager(), datas,titles);tab.setTabsFromPagerAdapter(mAdapter);TabLayout.TabLayoutOnPageChangeListener listener = new TabLayout.TabLayoutOnPageChangeListener(tab);viewPage.addOnPageChangeListener(listener);viewPage.setAdapter(mAdapter);tab.setupWithViewPager(viewPage);//这里就是将两个自定义tab添加到tablayout中TabLayout.Tab tabs = tab.getTabAt(0);tabs.setCustomView(mAdapter.getTabView0());tabs = tab.getTabAt(1);tabs.setCustomView(mAdapter.getTabView1());//这一行代码是为了实现从别的页面跳转过来之后可以跳转到不同的tab和viewpage下,而不是老是默认从第一个开始。viewPage.setCurrentItem(currentTab);}

3. 实现FragmentPagerAdapter

public class FragmentPagerAdapter extends FragmentPagerAdapter {private List<Fragment> view;private List<String> titles;private LayoutInflater mInflater;public DetailFragmentPagerAdapter(FragmentManager fragmentManager, List<Fragment> views, List<String> titles) {super(fragmentManager);this.titles = titles;this.view = views;}@Overridepublic Fragment getItem(int position) {// TODO Auto-generated method stubreturn view.get(position);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn view.size();}//没有自定义view的话,这里是显示tab标题的名称,但是自定义之后就需要把这里消除掉// @Override// public CharSequence getPageTitle(int position) {//// return titles.get(position);// }
//因为是两个不同的自定义Tab我就分成两个写了,不知道大家有什么更好的处理方法。public View getTabView0() {mInflater = LayoutInflater.from(Context);View view = mInflater.inflate(R.layout.item_tab_left, null);TextView tv = (TextView) view.findViewById(R.id.tab_text_left);tv.setText(titles.get(0));return view;}public View getTabView1() {mInflater = LayoutInflater.from(Context);View view = mInflater.inflate(R.layout.item_tab_right, null);TextView tv = (TextView) view.findViewById(R.id.tab_text_right);tv.setText(titles.get(1));return view;}}

4.item_tab_left的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/tab_left_selector"android:orientation="vertical" ><TextView
        android:id="@+id/tab_text_left"android:layout_width="80dp"android:layout_height="30dp"android:gravity="center"android:textColor="@color/black" /></LinearLayout>

5.tab_left_selector的实现

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/tab_left_unselect" android:state_selected="false"/><item android:drawable="@drawable/tab_left_select" android:state_selected="true"/></selector>

6.tab_left_select的实现

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 边缘线的宽度和颜色 --><corners
        android:bottomLeftRadius="6dp"android:topLeftRadius="6dp" /><solid android:color="@color/white" /><stroke
        android:width="1dp"android:color="@color/blue_title" />
</shape>

7.tab_left_unselect的实现就是改一下这个 再往后应该都会了把

<strokeandroid:width="1dp"android:color="@color/white" />

代码基本没问题,就是改成自己的颜色,图片,还有context就ok了
忘了还有fragment的实现自己百度哈

Android---Tablayout自定义tab相关推荐

  1. YY项目之TabLayout自定义Tab的title

    2019独角兽企业重金招聘Python工程师标准>>> 首先介绍一下Tablayout和ViewPager配合的基本用法 布局文件: <?xml version="1 ...

  2. android tablayout 自定义,TabLayout的自定义

    TabLayout的自定义,主要是通过setCustomView方法来添加自定义布局实现. 自定义TabLayout的实现主要包含以下几个步骤 ●创建自定义布局(这里我加了一个动画控件,可以替换成其他 ...

  3. android tablayout 自定义,TabLayout用法详解及自定义样式

    TabLayout的默认样式: app:theme="@style/Widget.Design.TabLayout" 从系统定义的该样式继续深入: fill fixed 264dp ...

  4. Android TabLayout自定义指示器之三角形效果实现

    效果图如下 ScanToPayActivity布局 <android.support.constraint.ConstraintLayoutxmlns:android="http:// ...

  5. android 自定义多tab悬浮控件,Android编程实现自定义Tab选项卡功能示例

    本文实例讲述了Android编程实现自定义Tab选项卡功能.分享给大家供大家参考,具体如下: import android.app.TabActivity; import android.conten ...

  6. android开发实现tab,Android 开发之获得Tablayout中子Tab所在的View

    最近项目中想做一个新手提示的功能,就是在指定的View上弹出一个类似PopupView的气泡提示框. 效果见下图: Screenshot_20170426-151801_01.png 预想在TabLa ...

  7. Android --- TabLayout 切换时,改变选项卡下字体的状态(大小、加粗、默认被选中第一个)

    文章目录 一.前言 二.源码实例 1.选项卡所在的布局文件 `fragment_course_selection.xml` 2.选项卡所在类 `CourseSelectionFragment.java ...

  8. Android TabLayout定制CustomView与ViewPager交互双向联动

     Android TabLayout定制CustomView与ViewPager交互双向联动 我之前写了一些关于Android Material Design TabLayout的文章, (1)& ...

  9. AppBarLayout中的Android TabLayout

    In this tutorial, we'll discuss and implement Android TabLayout in our android application. Also we' ...

  10. [Android]Tablayout:修改指示器indicator的宽度

    一.问题描述: 最近接触到了Tablayout,需求是要把Tablayout的下划线宽度缩短,或者说使其可以进行自定宽度. 百度上面大多数利用反射,(具体可百度查询),这种方法确实可以把下划线变短,但 ...

最新文章

  1. python 函数(二)
  2. java 检查输入_在java中检查输入的问题
  3. 深入理解ROS技术 【1】ROS下的模块详解(1-65)
  4. Java代码优化(长期更新)
  5. 小米故事:凭什么把MIUI用户做到1亿 | PMcaff-干货
  6. Impala介绍,Impala架构,Impala安装,impala Shell ,分区创建,refresh,load数据,获取数据的元数据
  7. 情感分析之电影评论分析-基于Tensorflow的LSTM
  8. 主动找智能钥匙 PKE取代RKE是大势所趋
  9. 省赛模拟一 又一道简单题
  10. Shell 神技:掩盖 Linux 服务器上的操作痕迹
  11. (转)李开复哥伦比亚大学演讲:如何才能不错过人工智能时代
  12. MySQL进阶书籍推荐
  13. MMR 排序多样化重排序算法
  14. 计算机组成原理:中央处理器(2)
  15. 哥吃的不是饭,是农药~~!是化肥~~!是激素~!!
  16. 神圣的QA——写给应届毕业生
  17. 【Hexo】选择更高级的Markdown渲染器
  18. Python获取多核CPU温度 均值
  19. iOS系统越狱研究现状梳理
  20. 精读-软件测试的艺术之调试,极限测试和因特尔应用系统的测试

热门文章

  1. vue使用qrcode生成二维码
  2. vue-qrcode生成二维码
  3. 电商宝打单发货-打单设置
  4. 12个windows电脑快捷键小技巧,速收藏
  5. nodejs从服务器返回静态文件,详解Nodejs之静态资源处理
  6. html那些说不定你不知道的知识。
  7. 开源大数据处理工具汇总
  8. matlab实验7绘图操作绘制三维曲线,上机习题6 MATLAB7.0三维绘图
  9. Spring Boot 基础学习之(五)页面通过自定义LocaleResolver组件实现网页页面的的中英文转换
  10. ROS从入门到精通0-1:教程导读