android 自定义indicator,Android实现自定义Indicator的导航控件
一 介绍:
导航功能几乎是所有的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的导航控件相关推荐
- Android之RemoteViews篇上————通知栏和桌面小控件
Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 文章目录 Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 二.RemoteViews的概 ...
- 给DataList分页有两个办法:1、自定义实现分页方法 2、用第三方控件(例如AspNetPager)
给DataList分页有两个办法:1.自定义实现分页方法 2.用第三方控件(例如AspNetPager) 先介绍下如何自定义实现分页方法. 我的DataList分页方法的核心原理是利用PagedDat ...
- android menu item 显示,Android 如何通过menu id来得到menu item 控件 .
Android 如何通过menu id来得到menu item 控件 . (2012-07-21 06:43:31) 标签: android 如何 杂谈 Android 如何通过menu id来得到m ...
- android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题
50_样式与主题 android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题 2013/5/12 50_样式与主题 ----------------- android样式和主题(st ...
- android 的a标签,Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)...
在5.2.1节和5.2.2节介绍了标签以及TextView自动识别的特殊文本(网址.电话号.Email等),这些都可以通过单击来触发不同的动作.虽然这些单击动作已经可以满足大多数需要了,但如果读者想在 ...
- Android自定义View精品(CustomCalendar-定制日历控件)
版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 目录: 文章目录 1.分析 2.自定义属性 3.onMeasure() 4.onDraw() ①.绘制月份 ...
- Android之打造可定制的全场秒杀倒计时控件
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51005062 本文出自:[顾林海的博客] ##前言 这几天翻看之前写的 ...
- 腾讯Android自动化测试实战3.1.4 Robotium的控件获取、操作及断言
3.1.4 Robotium的控件获取.操作及断言 Robotium是一款在Android客户端中的自动化测试框架,它需要模拟用户操作手机屏幕.要完成对手机的模拟操作,应该包含以下几个基本操作: (1 ...
- android如何创建spinner组件,Andriod开发之下拉列表控件(Spinner)的用法
Spinner是Android的下拉列表控件,今天对这个控件进行了学习,发现该控件比其它简单控件使用起来稍微复杂,特地将Spinner控件的使用方法以及注意事项记录下来,以备后用. Spinner控件 ...
- android 仿ios三级联动,仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果...
Android-PickerView 注意事项.详请使用方式.更新日志等,请查看 Wiki文档 Wiki文档,Wiki文档,Wiki文档 !~ 重要的事情说三遍 对于使用上有任何疑问或优化建议等,欢迎 ...
最新文章
- 安卓使用Socket发送中文,C语言服务端接收乱码问题解决方式
- ABP官方文档翻译 0.0 ABP官方文档翻译目录
- Android如何在java代码中设置margin
- java rocketmq消费_rocketmq消费负载均衡--push消费详解
- linux vim编辑器的用法
- lz98n外接电源注意问题
- 理论基础 —— 排序 —— 鸡尾酒排序
- 视频出炉 | LeCun、Marcus激辩AI是否需要类似人类的认知能力
- fukk _GNU_SOURCE __USE_GNU
- 思科2811路由器采购回来首次配置
- SMART原则是什么
- 自控原理学习笔记---控制系统稳定性分析
- 压力传感器原理与组成
- 跟熊浩学沟通30讲读后感_跟熊浩学沟通
- Rundll32.exe原理及使用, 参数传递问题解决方法(可用于批处理中)
- pytorch torch.nn到底是什么?
- 阿里巴巴校招内推简历筛选方案
- python实现秒表计时器
- 解决Fiddler不能抓包问题
- 准备VB或C#开发环境(Visual Studio)
热门文章
- 2023跨境出海指南:马来西亚网红营销白皮书
- readyState的值的含义
- 【Transformer架构】Transformers are RNNs (linear transformer)
- 护照阅读器助力旅行社快捷录入
- 《如何阅读一本书》读后总结
- 信托公司消金小额贷款项目的现金流预测
- 关于连接同一wifi,手机可以上网,电脑无法上网问题
- 一台电脑已经连接WIFI,另一台电脑想通过网线连接到网络
- java 爬取ajax,R语言爬虫系列4|AJAX与动态网页介绍
- 2022元旦首发,2021年阿里春招+秋招+社招+校招Java后端开发面试题汇总,看完轻松收下offer