android 防腾讯新闻标题栏,仿腾讯视频android客户端上方的标题栏

49ab179dd0eb36965635a2fb71513306.png

如图,上方的导航栏是不是很酷,首先它本身是可以滑动的,然后右侧有一个可以查看所有Tab的按钮,然后他和下方的ViewPager还是联动的,可以通过点击它切换ViewPager,并且ViewPager滑动,它也会随着改变,还有指示条。如果要实现这个效果怎么办?

当然,完全可以自己定义实现,但是有太多的细节需要去考虑到,还得手动调整指示条的位置,这还不是问题,问题是滑动到头怎么办,而且需求要求Tab项不确定,指示条长度就不一样,滑动范围也不确定,不过还是可以实现的。但是想想就觉得代码太冗余了...

于是我想,可不可以用ViewPager就能实现?

上方的Tab用PagerTabStrip去实现,但是一想,不行啊,右侧的查看更多怎么办?后来一想,我可以用FrameLayout来实现,因为ViewPager和PagerTabStrip是一体的,所以我把整个ViewPager先放入FrameLayout里,然后在右上角摞上一个ImageView就可以实现效果了!联动和效果都有了。

可是,问题又出现了,PagerTabStrip的tab之间的距离他封装的有一个最小的距离,而且无法修改,所以他的setTextSpacing方法只能调整的越来越大,却不能比他设置的最小值还小,所以我就...

所以这条路就走不通了。

我记得我之前实现过可以让标题栏收缩在屏幕之中显示的,然后我就回去看了笔记,果然!

不过不是只用ViewPager就能实现的,而是用TabLayout和ViewPager结合来实现的。

首先,在xml中定义TabLayout(和“查看更多”的按钮一块布好局):

android:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal">android:id="@+id/tabLayout"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="@color/main"app:tabTextAppearance="@style/TabStyle">android:id="@+id/more"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/more_divider"android:padding="10dp"android:src="@drawable/more"/> 然后代码中设置:

//下面这么写如果和ViewPager一绑定就会不显示文字,因为他会先remove掉之前的所有Tab,然后new,把ViewPager的标题拿//过来用,倘若你的ViewPager没有设置标题,则就会看不见了// //调接口获取所有咨询标题// mTitles.add("昌吉");// mTitles.add("体育");// mTitles.add("军事");// mTitles.add("历史");// mTitles.add("轻松一刻");// mTitles.add("NBA");// //给TabLayout添加标题// for (int i = 0; i < mTitles.size(); i++) {// mTabLayout.addTab(mTabLayout.newTab().setText(mTitles.get(i)));// }//使Tab可滚动mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);//设置指示条颜色mTabLayout.setSelectedTabIndicatorColor(Color.parseColor("#418DEB"));//设置文字颜色mTabLayout.setTabTextColors(Color.BLACK,Color.parseColor("#418DEB"));//将ViewPager和TabLayout联系起来mTabLayout.setupWithViewPager(mViewpager); 这是我一开始这么写的,发现Tab的文字不见了,但是指示条还在,然后还可以正常滑动,而且不蹦。

然后我把

//将ViewPager和TabLayout联系起来mTabLayout.setupWithViewPager(mViewpager);

这一句屏蔽了,发现又能显示了!

然后就开始百度,发现了大神的解决方法->点击打开链接

原来如果你和ViewPager绑定之后,他会先remove掉之前的所有Tab,然后new出新的Tab,把ViewPager的标题拿过来用,倘若你的ViewPager没有设置标题,则就会出现看不见了文字的情况了。

所以,改成下面这样写:

//使Tab可滚动mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);//设置指示条颜色mTabLayout.setSelectedTabIndicatorColor(Color.parseColor("#418DEB"));//设置文字颜色mTabLayout.setTabTextColors(Color.BLACK,Color.parseColor("#418DEB"));//将ViewPager和TabLayout联系起来mTabLayout.setupWithViewPager(mViewpager);//在上一行代码“mTabLayout.setupWithViewPager(mViewpager);”之后添加TabmTitles.add("昌吉");mTitles.add("体育");mTitles.add("军事");mTitles.add("历史");mTitles.add("轻松一刻");mTitles.add("NBA");//这里的mViews一定要和mTitle长度一致(从同一个接口返回的List里取)for(inti = 0;i < mViews.size();i++) {

mTabLayout.getTabAt(i).setText(mTitles.get(i));}

也可以在xml中设置TabLayout的属性:

app:tabTextAppearance="@style/TabStyle">

到此,完美实现效果!

最后,提一下,ViewPager添加View,尽量不要用inflate来添加,改用在代码中new的形式添加,可以少定义好多布局,而且inflate会很耗时间!

提供一种思路:

private voidinitViews() {

mViews= newArrayList<>();for(inti = 0;i < 6;i++) {

//要添加的ViewLinearLayout pager = newLinearLayout(getActivity());LinearLayout.LayoutParams params = newLinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);pager.setOrientation(LinearLayout.HORIZONTAL);//官方下拉刷新finalSwipeRefreshLayout refreshLayout = newSwipeRefreshLayout(getActivity());refreshLayout.setLayoutParams(params);refreshLayout.setOnRefreshListener(newSwipeRefreshLayout.OnRefreshListener() {

@Overridepublic voidonRefresh() {

refreshLayout.setRefreshing(false);}

});//刷新的时候变化的颜色refreshLayout.setColorSchemeColors(Color.parseColor("#418DEB"),Color.BLUE,Color.BLACK);//刷新里面的ListViewListView listView = newListView(getActivity());listView.setLayoutParams(params);MyBaseAdapter mListViewAdapter = newMyBaseAdapter();listView.setAdapter(mListViewAdapter);refreshLayout.addView(listView);pager.addView(refreshLayout);mViews.add(pager);}

} 来自我的工作项目:掌上昌吉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链接克隆 完整克隆_深入克隆

链接克隆 完整克隆在继续克隆概念之前&#xff0c;让我们用对象创建概念刷新基础知识。 使用new运算符创建对象时&#xff0c;对象将在堆中获取内存分配。 堆中的对象创建 在Java中&#xff0c;理想情况下仅通过引用变量修改对象&#xff0c;即仅复制对象的内存地址&#xff…

linux系统调用和库函数调用的区别

Linux下对文件操作有两种方式&#xff1a;系统调用&#xff08;system call&#xff09;和库函数调用&#xff08;Library functions&#xff09;。可以参考《Linux程序设计》&#xff08;英文原版为《Beginning Linux Programming》&#xff0c;作者是Neil Matthew和Richard S…

如果您在2016年编写过Java代码-这是您不容错过的趋势

2016年最有趣的Java相关主题 关于代码&#xff0c;有很多热门话题&#xff0c;而要跟上所有事情&#xff0c;这是一项全职的工作。 如果您想知道如何从谷壳中分离出小麦&#xff0c;我们已经为您完成了工作。 在下面的文章中&#xff0c;我们将介绍2016年最热门的内容&#x…

第三届蓝桥杯省赛---第39级台阶

第39级台阶 小明刚刚看完电影《第39级台阶》&#xff0c;离开电影院的时候&#xff0c;他数了数礼堂前的台阶数&#xff0c;恰好是39级! 站在台阶前&#xff0c;他突然又想着一个问题&#xff1a; 如果我每一步只能迈上1个或2个台阶。先迈左脚&#xff0c;然后左右交替&#xf…

android 视图覆盖,如何在Android中添加覆盖视图超过其他视图?

设为背景&#xff01;只是开玩笑…你需要的是把你的意见放在一个RelativeLayout里.会有什么工作&#xff1a;xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"fill_parent"android:layout_height"fill_parent"&…

Linux内核源码分析方法

一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”&#xff0c;也正因为如此&#xff0c;使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux&#xff0c;深入操作系统的本质&#xff0c;阅读内核源码是最有效的途径。我们都知道&#xff0c;想成为优秀的程序…

深度学习框架Keras介绍及实战

Keras 是一个用 Python 编写的高级神经网络 API&#xff0c;它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果&#xff0c;是做好研究的关键。 本文以Kaggle上的项目:IMDB影评情感分析为例,…

操作系统--处理机调度

4 处理机调度 4.1 调度类型 操作系统必须为多个进程的竞争请求分配计算机资源。处理机调度的任务就是选出待分派的作业或进程&#xff0c;为之分配处理机。 为了便于处理机调度管理&#xff0c;通常在处理机调度中采用分级调度方式&#xff0c;其中包括以下3级调度&#xff1a;…

permgen_什么是PermGen泄漏?

permgen接下来是对Java应用程序中特定类型的内存问题的实用介绍。 即–我们将分析导致java.lang.OutOfMemoryError&#xff1a;PermGen空间的错误 堆栈跟踪中的症状。 首先&#xff0c;我们将介绍理解该主题所需的核心概念&#xff0c;并解释什么是对象&#xff0c;类&#…

TP、PHP同域不同子级域名共享Session、单点登录

TP、PHP同域不同子级域名共享Session、单点登录 目的&#xff1a; 为了部署同个域名下不同子级域名共享会话&#xff0c;从而实现单点登录的问题&#xff0c;一处登录&#xff0c;同域处处子系统即可以实现自动登录。 PHP支持通过设置cookie使得同域不同子域共享SESSION 1. 通…

html语言书写注意事项,HTML注意事项(学习笔记)

1、在所有浏览器中都是有效的&#xff0c;但使用 其实是更长远的保障。类似的标签也一样2、标签最好用小写&#xff0c;未来的版本中可能强制用小写3、标签属性始终为属性值加引号属性值应该始终被包括在引号内。双引号是最常用的&#xff0c;不过使用单引号也没有问题。在某些…

UTF-8、GB2312、GB18030、GBK和BIG5等字符集编码范围的具体说明

一预备知识 1&#xff0c;字符&#xff1a;字符是抽象的最小文本单位。 它没有固定的形状&#xff08;可能是一个字形&#xff09;&#xff0c;而且没有值。 “A”是一个字符&#xff0c;“”&#xff08;德国、法国和许多其他欧洲国家通用货币的标志&#xff09;也是一个字…

使用Forge,WildFly Swarm和Arquillian开发微服务

在本文中&#xff0c;我们将看到如何使用WildFly Swarm和Forge开发微服务&#xff0c;以及如何使用Arquillian和Rest Assured对其进行测试。 WildFly Swarm提供了一种创新的方法来打包和运行Java EE应用程序&#xff0c;方法是将它们与足够的服务器运行时一起打包以“ java -j…

html页面加载时触发的方法,在页面加载时触发onchange html事件

好的&#xff0c;我在select字段上有一个onchange事件。它现在很棒。当下拉“网络”更改时&#xff0c;它会刷新第二个下拉列表。我还希望顶部的ajax代码在页面加载和onchange上触发&#xff0c;以便填充第二个列表。这是因为它在编辑页面上。这是使用第一个的ajax调用function…

PYTHON-进阶-编码处理小结

开始 用python处理中文时&#xff0c;读取文件或消息&#xff0c;http参数等等 一运行&#xff0c;发现乱码(字符串处理&#xff0c;读写文件&#xff0c;print) 然后&#xff0c;大多数人的做法是&#xff0c;调用encode/decode进行调试&#xff0c;并没有明确思考为何出现乱码…

华为鸿蒙话题作文800字,关于鸿蒙OS 华为最高层发布最新通知:统一口径-华为,智能手机,鸿蒙...

6月2日晚&#xff0c;华为正式推出了HarmonyOS(鸿蒙操作系统)&#xff0c;引发了国内外空前关注。OS操作系统是中国手机甚至整个科技行业的弱点&#xff0c;因此鸿蒙OS带来的震撼及争议都很多&#xff0c;甚至华为内部员工对它的认知也不相同。为此华为总裁办昨天发布了题为《关…

8-4 Fabled Rooks uva11134

题意&#xff1a;你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内 给出该矩形左上角坐标和右下角坐标四个点 必须满足放车的位置在矩形内 边上也行 如果无解输出IMPSSIBLE 行与列是独立的 所以可以分割成两个一模一…

谷歌guava_Google Guava MultiMaps

谷歌guava番石榴 这是我尝试解释和探索Google很棒的Guava java库的系列文章中的第一篇。 我在搜索Apache Commons Collections的通用版本时遇到了番石榴&#xff08;Guava&#xff09;–我需要一个Bimap并且厌倦了必须使用强制类型转换来填充我的代码–但是我发现要好得多。 …

python 获取系统相关编码的函数

怎么避免UnicodeEncodeError: ‘ascii’ codec can’t…类似的错误&#xff1f; 1、首先在py文件头部指定文件内容编码&#xff0c;例如&#xff1a;# coding: utf8 2、文件保存的时候要和py文件头部编码一致 3、在用decode和encode的时候&#xff0c;一定要确认要转换的字符原…

百度的html代码是什么,百度网页源代码是什么?

2017-07-28Java抓取网页的内容代码是什么public static String getHtmlReadLine(String httpurl){String CurrentLine”";String TotalString”";InputStream urlStream;String content”";try {URL url new URL(httpurl);// URL url new URL(“http://www。 …