Android之仿今日头条标题栏效果

学习Android应用开发已经有一段时间了,对涉及应用开发的主要基础知识已经有了一定的了解,学习过程中写的博客被我整理成立了一个专栏《Android应用开发基础》。但是基本上写的代码都是一些单一知识点的演示Demo,与一个完整的产品相差甚远。要具备开发复杂的产品级应用的能力,在掌握了应用开发的基础知识的前提下,最好的方法莫过于模仿别人开发的优秀应用。在模仿中循序渐进,以程序员角度去看待每一个APP是如何实现的,它有什么优缺点,并从中提升自己。模范别人应用其实就是一种开发的学习手段,因为如果自己去开发,没有UI没有交互流程,那样的话,可能会比较难下手,当有了别人的交互流程和一些资源,你就可以去自己考虑如果实现相关功能,如何达到类似效果。可能你的方法没那么完善,实现效果没原版的那么绚丽,可是这些都带有你的思想,这就足够了。

今日头条新闻客户端是我平时使用比较多的一个Android应用,以它作为模仿目标是一个不错的选择。本系列文章将循序渐进,先实现今日头条的标题栏效果。

今日头条的标题栏没有在Android系统定义的标题栏区域,而是把它附加到Acitivity的contentView下。所以首先要去掉Android系统标题栏,方法如下:

修改\res\values里面的style.xml文件

在AppTheme主题下增加一个条目

<item name="android:windowNoTitle">true</item>

实例:TouTiaoTitleBarDemo

运行效果:

布局视图层次结构:

代码清单:

style资源文件:styles.xml

<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        <item name="android:windowNoTitle">true</item>
    </style>

    <style name="main_title_bar_style">
        <item name="android:background">@drawable/bg_titlebar_main</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">@dimen/title_bar_height</item>
    </style>
</resources>

布局文件:activity_main.xml

<RelativeLayout android:id="@+id/main_layout"
    android:background="@color/activity_bg_color"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <RelativeLayout android:id="@+id/title_bar" style="@style/main_title_bar_style">
        <FrameLayout android:id="@+id/top_head_container"
            android:paddingLeft="10.0dip"
            android:paddingRight="10.0dip"
            android:layout_width="wrap_content"
             android:layout_height="fill_parent">
            <ImageView android:layout_gravity="center_vertical"
                android:id="@+id/top_head"
                android:contentDescription="@string/app_name"
                android:background="@drawable/bg_head"
                android:src="@drawable/default_round_head"
                android:padding="2.0dip"
                android:layout_width="@dimen/head_size"
                android:layout_height="@dimen/head_size"
                android:scaleType="fitXY" />
        </FrameLayout>
        <ImageView android:gravity="center"
            android:id="@+id/top_more"
            android:contentDescription="@string/app_name"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_marginRight="12.0dip"
            android:src="@drawable/right_drawer"
            android:scaleType="centerInside"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true" />
        <RelativeLayout android:id="@+id/title_click_layout"
            android:paddingLeft="13.0dip"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_centerInParent="true">
            <FrameLayout android:id="@+id/title_parent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true">
                <ImageView android:layout_gravity="center"
                    android:id="@+id/title_recent"
                    android:contentDescription="@string/app_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/title" />
            </FrameLayout>
            <ImageView android:id="@+id/top_refresh"
                android:contentDescription="@string/app_name"
                android:padding="3.0dip"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/refreshicon_titlebar"
                android:layout_toRightOf="@id/title_parent"
                android:layout_centerVertical="true" />
        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>

时间: 2024-10-26 08:27:35

Android之仿今日头条标题栏效果的相关文章

Android之仿今日头条顶部导航栏效果

随着时间的推移现在的软件要求显示的内容越来越多,所以要在小的屏幕上能够更好的显示更多的内容,首先我们会想到底部菜单栏,但是有时候像今日头条新闻客户端要显示的内容太多,而且又想在主界面全部显示出来,所以有加了顶部导航栏. 今日头条顶部导航栏区域的主要部分是一个导航菜单.导航菜单是一组标签的集合,在新闻客户端中,每个标签标示一个新闻类别,对应下面ViewPager控件的一个分页面.当用户在ViewPager区域滑动页面时,对应的导航菜单标签也会相应的被选中,选中的标签通过一个矩形红框高亮显示,红框背

Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)

前言 上篇博客我们说到了今日头条频道管理的操作交互体验,我也介绍了2个GridView之间Item的相互移动.详情请參考:Android 仿今日头条频道管理(上)(GridView之间Item的移动和拖拽) 今天把相对照较复杂的gridView的拖拽也记录下.在開始之前我们事先要了解下Android的事件分发机制.网上这方面的资料也比較多.由于自己定义控件大部分要用到事件分发机制的知识. 实现思路 要实现Item的拖拽.事实上并非真正要去拖拽GridView的Item.而是使用WindowMan

仿今日头条下拉出现SearchBar,再下拉刷新效果,SearchListView实现以及原理讲解

先看效果 分别是我的效果和今日头条的效果: 以上效果包括: 1.如果下拉的高度超过search view的高度的3/4,但是小于head view高度,则松开手时search view自动出现 2.如果下拉的高度小于search view的高度的1/4,则松开手时search view自动回弹消失 3.如果下拉的高度超过head view的总高度,则松手进行刷新 4.刷新完成自动隐藏search view 实现原理讲解 参考了 github开源项目:[https://github.com/viv

仿今日头条的graidview拖动

下面先上这次实现功能的效果图:(注:这个效果图没有拖拽的时候移动动画,DEMO里面有,可以下载看看) 三.开发思路 1.  获取数据库中频道的列表,如果为空,赋予默认列表,并存入数据库,之后通过对应的适配器赋给对应的GridView 2.  2个GridView--(1.DragGrid   2. OtherGridView) DragGrid 用于显示我的频道,带有长按拖拽效果 OtherGridView用于显示更多频道,不带推拽效果 注:由于屏幕大小不一定,外层使用ScrollView,所以

[转]灯灯小程序开发手记:仿今日头条(上)

本文转自:http://www.jianshu.com/p/a1e0b8abb12d 写在前面 新的一年,祝大家新年快乐!当然对于程序员来说,新的一年,也要有新的改变.因此灯灯决定凑热闹编写微信小程序啦! 上一篇文章<记一次小程序开发过程>中,灯灯大致写了下自己第一次开发小程序的感受和流程.这一次灯灯会详细记录下自己制作一个小程序的思路.遇到的问题.涉及到的代码等和大家分享.    视频教程地址:http://study.163.com/course/introduction.htm?cour

iOS仿今日头条滑动导航

之前写了篇博客网易首页导航封装类.网易首页导航封装类优化,今天在前两个的基础上仿下今日头条. 1.网易首页导航封装类中主要解决了上面导航的ScrollView和下面的页面的ScrollView联动的问题,以及上面导航栏的便宜量. 2.网易首页导航封装类优化中主要解决iOS7以上滑动返回功能中UIScreenEdgePanGestureRecognizer与ScrollView的滑动的手势冲突问题. 今天仿今日头条滑动导航和网易首页导航封装类优化相似,这个也是解决手势冲突,UIPanGesture

仿今日头条和qq侧滑和智慧北京的小项目 3

仿今日头条和QQ侧滑和智慧北京的小项目3 本项目图片素材均来自今日头条,QQ侧滑没有使用Android原生的NavigationDrawer,而使用的是第三方SlidingMenu,原因是这个控件暂时没有仔细研究(后期会研究并写demo),项目整体可以说是使用了一个Activity加多个Fragment,全部采用沉寂式. 前文摘要:仿今日头条和QQ侧滑和智慧北京的小项目2 TabPager(NewsPager新闻页面对应的11个子页面) 此页面相对比较复杂,所以单独用一篇blog来说明都处理了哪

vue2.0仿今日头条开源项目

vue-toutiao 这是用 vue.js 2.0 高仿 今日头条 的移动端项目,结合了原生app的部分功能以及网页版. 前言 本人是 今日头条 的重度用户,在学习vue.js过程中,在GitHub上看到了很多高仿webapp的好项目.由此在有了一定的技术积累后,开始构思使用Vue写今日头条,一是自己对于头条的喜爱,另外也是对于自己学习成果的检验. 技术栈 vue.js 2.0全家桶(vue.vuex.vue-router) axios.jsonp element-ui.iview vue-l

基于Vue 2.0高仿 &lt;今日头条&gt; 单页应用。

这是用 vue.js 2.0 高仿 今日头条 的移动端项目,结合了原生app的部分功能以及网页版. 技术栈 vue.js 2.0全家桶(vue.vuex.vue-router) axios.jsonp element-ui.iview vue-lazyload.animate.css.moment.flexible.js 在线地址 线上地址(预览地址) GitHub源码地址 说明 项目内定死 账号: admin, 密码: admin. 因为数据原因,首页请求的数据接口来自网页版今日头条,修改了一