android开发实现tab,Android 开发之获得Tablayout中子Tab所在的View
最近项目中想做一个新手提示的功能,就是在指定的View上弹出一个类似PopupView的气泡提示框。
效果见下图:
Screenshot_20170426-151801_01.png
预想在TabLayout的某个子View上弹出这个提示框,但是发现在现有公开的方法中取不到相应的View对象,研究了一下源码后,发现可以使用反射取到相应的View对象。
但是怎么获取下图中红圈中的View对象呢?
ZZZZZZ.png
public voidaddTab(@NonNullTabtab, intposition, booleansetSelected) {
if(tab.mParent!=this) {
throw newIllegalArgumentException("Tab belongs to a different TabLayout.");
}
configureTab(tab,position);
addTabView(tab);//这个是增加子Tab的方法,我们重点看这个方法
if(setSelected) {
tab.select();
}
}
我们接下来重点研究那个 addTabView 方法。
private void addTabView(Tab tab) {
final TabView tabView = tab.mView;
mTabStrip.addView(tabView, tab.getPosition(), createLayoutParamsForTabs());
}
发现了一个TabView对象,跟这个方法点进去看看。
TabView源码:
class TabView extends LinearLayout implements OnLongClickListener {
private Tab mTab;
private TextView mTextView;
private ImageView mIconView;
private View mCustomView;
private TextView mCustomTextView;
private ImageView mCustomIconView;
private int mDefaultMaxLines = 2;
public TabView(Context context) {
super(context);
if (mTabBackgroundResId != 0) {
ViewCompat.setBackground(
this, AppCompatResources.getDrawable(context, mTabBackgroundResId));
}
ViewCompat.setPaddingRelative(this, mTabPaddingStart, mTabPaddingTop,
mTabPaddingEnd, mTabPaddingBottom);
setGravity(Gravity.CENTER);
setOrientation(VERTICAL);
setClickable(true);
ViewCompat.setPointerIcon(this,
PointerIconCompat.getSystemIcon(getContext(), PointerIconCompat.TYPE_HAND));
}
//...此处省略若干行代码
}
有TextView对象也有ImageView对象,还有各种布局的方法,这时候有个猜测,是不是这个Tabview就是我们想要得到的View对象呢?
那怎么得到这个TabView对象呢?注意下面addTab中的这个方法
final TabView tabView = tab.mView;
获取到当前的Tab就可了。而获取tab是有公开的方法的:
/**
* Returns the tab at the specified index.
*/
@Nullable
public Tab getTabAt(int index) {
return (index < 0 || index >= getTabCount()) ? null : mTabs.get(index);
}
传入子Tab的角标就可以了。
至此,基本上就可以开始写代码了。
public View getTabView(int index){
View tabView = null;
TabLayout.Tab tab = binding.tabs.getTabAt(index);
Field view = null;
try {
view = TabLayout.Tab.class.getDeclaredField("mView");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
view.setAccessible(true);
try {
tabView = (View) view.get(tab);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return tabView;
}
android开发实现tab,Android 开发之获得Tablayout中子Tab所在的View相关推荐
- Android开发规范[Java+android]
说明:该文档由阿里<Java开发规范>和<Android开发规范>整理而来 [强制]必须遵守,违反本约定或将会引起严重的后果: [推荐]尽量遵守,长期遵守有助于系统稳定 ...
- 开发一个基于 Android系统车载智能APP
很久之前就想做一个车载相关的app.需要实现如下功能: (1)每0.2秒更新一次当前车辆的最新速度值. (2)可控制性记录行驶里程. (3)不连接网络情况下获取当前车辆位置.如(北京市X区X路X号) ...
- 基于Android的手机安全卫士的开发
基于Android的手机安全卫士的开发 开发环境 处理器:Intel® Core™ i5-5200U CPU 2.20GHz 内存:4GB 硬盘:500GB 操作系统:Windows 7中文版,64位 ...
- Android Studio 教程:入门开发第一个程序
Android Studio 教程:入门开发第一个程序 2018.09.11 14:30 16005浏览 开发第一应用 可以开发属于自己的应用,是否有点小激动?好吧!让我们开始,首先点击Start a ...
- Android连载之:第二章第三节:利用其他的开发环境和工具开发Android应用程序
2.3 利用其他的开发环境和工具开发Android应用程序 推荐使用带有Android插件的Eclipse来开发Android应用程序,ADT插件提供了编辑.编译.调试功能并集成进了IDE中.然而,S ...
- 移动开发技术【Android】:【part 2】——RecyclerView实现列表
上一篇请参见:移动开发技术[安卓]--Android_Studio[Part 1] 在上一篇中,我们说到,如何初步的使用Android Studio ,同时完成了基础微信页面的模仿设计.同时我们上一篇 ...
- Material Design 开发利器:Android Design Support Library 介绍
Material Design 开发利器:Android Design Support Library 介绍 本文翻译自著名博客 Android Developers,原作者是 Ian Lake,点击 ...
- Android环境搭建和Android HelloWorld—Android开发环境搭建
Android_Android开发环境搭建-搭建Android的开发环境 1.我考虑先下载JDK7.0,在JDK的安装中,考虑一般SDK都是向上兼容的,于是选择了最高的版本7.0 这里是我总结的详细的 ...
- android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...
本文实例讲述了Android开发使用HttpURLConnection进行网络编程.分享给大家供大家参考,具体如下: --HttpURLConnection URLConnection已经可以非常方便 ...
最新文章
- 即插即用新卷积:提升CNN性能、速度翻倍
- JS 二级菜单栏的tab切换
- 小米亿级大数据实时分析与工具选型 【转】
- es6与java的相似度_计算字符串的相似度-两种解法
- vector的reserve和resize
- Send data format set as XML
- linux help命令编写,Linux shell命令帮助格式详解
- 程序员如何快速成长为IT精英
- swift通知栏推送_如何使用Swift使用推送通知构建食品交付应用
- HDU1251 统计难题 trie树 简单
- idea 2018.1 创建springboot开启找回Run Dashboard
- HDU-1002 A + B Problem II Java大数
- Android6.0内核移植(1):分析编译日志
- 201671010119 2016-2017-2《Java程序设计》第十六周学习心得
- 抖音上非常火的整人小程序
- 柴静采访剑桥大学校长乐思哲
- TP6使用session
- warring:integer conversion resulted in a change of sign
- Python编曲实践(二):和弦的实现和进行
- 微信支付遇到 商户号该产品权限未开通,请前往商户平台产品中心检查后重试
热门文章
- gitstack连接詹金斯_詹金斯的Maven报告
- 新型消防机器人作文_消防机器人
- bootstrap自动生成html,Bootstrap框架动态生成Web页面文章内目录的方法
- Log4j2又爆雷!2.16.0存在DOS攻击风险,升级到2.17.0可解决!
- 皮一皮:女友在意的点....是包子!
- 重磅!Spring Boot 2.5.0火热发布,还学得动吗?
- 用了那么多年的 Master 分支或因种族歧视而成为历史?
- 每日一问一周汇总:第1期
- php支付密码控件,vue支付密码的图文实例
- T-SQL和安全机制