一 介绍:

导航功能几乎是所有的APP都具备的基础功能之一,Android系统提供了TabLayout+ViewPager的组合来实现该功能。再使用之初,发现该组合真是无敌了,但是。。。总有一些UI设计师觉得原生TabLayout的下划线样式不符合用户的审美,比如说,下划线的宽度要跟文本的宽度一样,下划线的样式要换成图片等等。TabLayout在这些需求面前显得那么无助,程序员被迫搬砖。

WeTabLayout继承自HorizontalScrollView,这是为了实现当有多个Tab的时候能够左右滑动,且当滑动的时候将选中的那个Tab移至屏幕中间。其直接父布局为LinearLayout,再设置Tab充满父布局,或者是水平自由排列的时候很方便。下划线由Drawable绘制,这样的话就可以随意的更改下划线的样式,设置宽高、设置图片、设置Shape等。其控件已经在应用中使用,目前来看相当稳定,之后打算用来替换原生的TabLayout;

文末有代码连接,可自行下载使用~

为什么使用WeTabLayout?

实现了TabLayout的基本功能。

扩展了在ViewPager+WeTabLayout有多个Tab时,ViewPager左右滑动的时候默认将当前选中的Tab移动到屏幕中间。

完全自定义的Indicator指示器,通俗一点就是下划线。其宽度、高度、颜色、样式、图片全部支持。

开关控制Indicator指示器的宽度是否跟Tab显示的文本宽度一样。

TabView支持自定义布局或者使用默认布局。其TabView在父布局中的位置,以及各个TabView之间的间距,完全自定义,也可选择TabView填充满父布局。

最重要的是WeTabLayout的源码简单,可以自行定制。

二 简单使用:

2.1 XML布局准备:

android:id="@+id/dil_tablayout"

android:layout_width="match_parent"

android:layout_height="56dp" />

android:id="@+id/viewpager"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_marginTop="56dp" />

复制代码

2.2 代码设置:

//Step 1 :查找对象

WeTabLayout tabLayout = findViewById(R.id.dil_tablayout);

ViewPager viewPager = findViewById(R.id.viewpager);

String[] titles = {"移动", "四个字的", "小灵通", "这个很长电影啊", "NBA", "电影", "小知识", "篮球"};

//重要的一步。

tabLayout.attachToViewPager(viewPager, titles);

复制代码

注意: 调用 tabLayout.setCurrentTab()方法设置默认选中的Tab的时候,必须在ViewPager设置Adapter之后。

2.3 更多属性设置:

//设置tabView的布局id,比如:R.layout.item_sliding_tab_layout.

public void setTabLayoutIds(int mTabLayout) {}

//这是一个接口回调,当WeTabLayout创建每个TabView的时候,会调用IHandleTab接口的方法。

//可以再改回调中改变一下TabView的一些属性。

public void addHandleTabCallBack(@NonNull IHandleTab mHandleTab)}

//设置Tab选中之后的回调。

public void setTabSelectedListener(WeTabSelectedListener mTabSelectedListener) {}

//设置选中的Tab根据传入的index。

public void setCurrentTab(int mCurrentTab) {}

//设置TabView填充满WeTabLayout。其原理就是给每个TabView设置whight = 1。

public void setTabFillContainer(boolean fill) {}

//设置下划线的颜色。

public void setIndicatorColor(int mIndicatorColor) {}

//设置下划线的高度,不需要转换成dp。

public void setIndicatorHeight(int mIndicatorHeight) {}

//设置下划线的宽度,不需要转换成dp。

public void setIndicatorWidth(int mIndicatorWidth) {}

//设置tab选中时文本的颜色。

public void setSelectedTabTextColor(int mSelectedTabTextColor) {}

//设置tab未选中时文本的颜色。

public void setDefaultTabTextColor(int mDefaultTabTextColor) {}

//设置下划线距离底部的margin。

public void setIndicatorBottomMargin(int margin) {}

//true 下划线的宽度跟Tab文本的宽度一样。 false的话 下划线的宽度跟TabView的宽度一样。

public void setIndicatorEqualTabText(boolean mIndicatorEqualTabText) {}

复制代码

2.4 属性应用Demo:

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final WeTabLayout tabLayout = findViewById(R.id.dil_tablayout);

ViewPager viewPager = findViewById(R.id.viewpager);

final String[] titles = {"移动", "四个字的", "小灵通", "这个很长电影啊", "NBA", "电影", "小知识", "篮球"};

findViewById(R.id.selected_one).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

tabLayout.setCurrentTab(3);

}

});

tabLayout.setTabLayoutIds(R.layout.item_sliding_tab_layout);

tabLayout.setIndicatorBottomMargin(10);

tabLayout.setIndicatorEqualTabText(true);

tabLayout.setTabFillContainer(false);

tabLayout.setCurrentTab(2);

tabLayout.addHandleTabCallBack(new IHandleTab() {

@Override

public void addTab(View tab, int index) {

//该方法再创建TabView的时候调用。

}

});

tabLayout.setTabSelectedListener(new WeTabSelectedListener() {

@Override

public void onTabSelected(View currentTab, int position) {

//TabView被选中的时候调用。

}

@Override

public void onPreTabSelected(View preTab, int prePosition) {

//上一个选中的TabView。

}

});

viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {

@Override

public Fragment getItem(int position) {

return CeshiFragment.newInstance();

}

@Override

public int getCount() {

return titles.length;

}

});

tabLayout.attachToViewPager(viewPager, titles);

}

}

复制代码

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Android实现自定义Indicator的导航控件]http://www.zyiz.net/tech/detail-123184.html

android 自定义indicator,Android实现自定义Indicator的导航控件相关推荐

  1. Android之RemoteViews篇上————通知栏和桌面小控件

    Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 文章目录 Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 二.RemoteViews的概 ...

  2. 给DataList分页有两个办法:1、自定义实现分页方法 2、用第三方控件(例如AspNetPager)

    给DataList分页有两个办法:1.自定义实现分页方法 2.用第三方控件(例如AspNetPager) 先介绍下如何自定义实现分页方法. 我的DataList分页方法的核心原理是利用PagedDat ...

  3. android menu item 显示,Android 如何通过menu id来得到menu item 控件 .

    Android 如何通过menu id来得到menu item 控件 . (2012-07-21 06:43:31) 标签: android 如何 杂谈 Android 如何通过menu id来得到m ...

  4. android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题

    50_样式与主题 android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题 2013/5/12 50_样式与主题 ----------------- android样式和主题(st ...

  5. android 的a标签,Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)...

    在5.2.1节和5.2.2节介绍了标签以及TextView自动识别的特殊文本(网址.电话号.Email等),这些都可以通过单击来触发不同的动作.虽然这些单击动作已经可以满足大多数需要了,但如果读者想在 ...

  6. Android自定义View精品(CustomCalendar-定制日历控件)

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 目录: 文章目录 1.分析 2.自定义属性 3.onMeasure() 4.onDraw() ①.绘制月份 ...

  7. Android之打造可定制的全场秒杀倒计时控件

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51005062 本文出自:[顾林海的博客] ##前言 这几天翻看之前写的 ...

  8. 腾讯Android自动化测试实战3.1.4 Robotium的控件获取、操作及断言

    3.1.4 Robotium的控件获取.操作及断言 Robotium是一款在Android客户端中的自动化测试框架,它需要模拟用户操作手机屏幕.要完成对手机的模拟操作,应该包含以下几个基本操作: (1 ...

  9. android如何创建spinner组件,Andriod开发之下拉列表控件(Spinner)的用法

    Spinner是Android的下拉列表控件,今天对这个控件进行了学习,发现该控件比其它简单控件使用起来稍微复杂,特地将Spinner控件的使用方法以及注意事项记录下来,以备后用. Spinner控件 ...

  10. android 仿ios三级联动,仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果...

    Android-PickerView 注意事项.详请使用方式.更新日志等,请查看 Wiki文档 Wiki文档,Wiki文档,Wiki文档 !~ 重要的事情说三遍 对于使用上有任何疑问或优化建议等,欢迎 ...

最新文章

  1. 安卓使用Socket发送中文,C语言服务端接收乱码问题解决方式
  2. ABP官方文档翻译 0.0 ABP官方文档翻译目录
  3. Android如何在java代码中设置margin
  4. java rocketmq消费_rocketmq消费负载均衡--push消费详解
  5. linux vim编辑器的用法
  6. lz98n外接电源注意问题
  7. 理论基础 —— 排序 —— 鸡尾酒排序
  8. 视频出炉 | LeCun、Marcus激辩AI是否需要类似人类的认知能力
  9. fukk _GNU_SOURCE __USE_GNU
  10. 思科2811路由器采购回来首次配置
  11. SMART原则是什么
  12. 自控原理学习笔记---控制系统稳定性分析
  13. 压力传感器原理与组成
  14. 跟熊浩学沟通30讲读后感_跟熊浩学沟通
  15. Rundll32.exe原理及使用, 参数传递问题解决方法(可用于批处理中)
  16. pytorch torch.nn到底是什么?
  17. 阿里巴巴校招内推简历筛选方案
  18. python实现秒表计时器
  19. 解决Fiddler不能抓包问题
  20. 准备VB或C#开发环境(Visual Studio)

热门文章

  1. 2023跨境出海指南:马来西亚网红营销白皮书
  2. readyState的值的含义
  3. 【Transformer架构】Transformers are RNNs (linear transformer)
  4. 护照阅读器助力旅行社快捷录入
  5. 《如何阅读一本书》读后总结
  6. 信托公司消金小额贷款项目的现金流预测
  7. 关于连接同一wifi,手机可以上网,电脑无法上网问题
  8. 一台电脑已经连接WIFI,另一台电脑想通过网线连接到网络
  9. java 爬取ajax,R语言爬虫系列4|AJAX与动态网页介绍
  10. 2022元旦首发,2021年阿里春招+秋招+社招+校招Java后端开发面试题汇总,看完轻松收下offer