ReactNative学习笔记-仿今日头条登录页面

ReactNative学习-仿今日头条登录页面

上次说完了SublimeText的安装,这是主要通过仿制一个今日头条的登录页面,来简单的介绍下React Native中常用控件的使用。

在仿制过程中,我们主要将使用的控件有如下三个:View,Text,Image

flexbox布局

在项目的开始之前,我们先简单的介绍下flexbox布局。flexbox又称之为弹性盒,是W3C提出的UI设计模型规范的一种实现,在React Native中实现了其大部分功能,并且大部分组件的style都支持flexbox布局样式设置。

位置:position键

关于position键,其值共有两项,'relative','absolute'

其中'relative'是默认值,表示当前的位置值是相对位置,而在采用‘absolute’时,则表示当前使用的是绝对位置

在使用absolute时,我们还能使用:top,left,right,bottom四个键,来表述当前组件距父组件对应位置的距离为多少pt。有关position键的使用,将在仿制代码中进行具体的介绍。

排列规则:flexDirection键

flexDirection键决定了组件内部的子组件的排列方式,共有两种常用的排列方式:'column','row'。其中column为默认的排列方式,即纵向排列,通过使用值:row,我们可以将排列方式调整为横向排列

方向排列:justifyContent键:

justifyContent键可以用来定义在一个给定方向上,如何排列子组件。总共有5个字符串类型值,分别为:

  • flex-start:顶端排列
  • flex-end:低端排列
  • center:居中排列
  • space-between:两端对齐
  • space-around:包裹

对齐方式:alignItems键:

alignItems键决定了View中的所有子组件的对齐方式。总共有4个字符串类型值,分别为:

  • flex-start:顶部对齐
  • flex-end:底部对齐
  • center:居中
  • stretch:拉上

在flexbox的使用过程中,还有一些是决定组件显示规则的键,如:flex,margin等,此处不再进行一一说明,读者如有兴趣,这里是有关flexbox使用的官方说明地址:https://facebook.github.io/react-native/docs/flexbox.html,读者可自行查看。

绘制今日头条的登录页面

上面简单的介绍了下flexbox布局,现在我们便开始仿制今日头条的登录页面。

此处插入图片

页面的分割

通过观察,我们可以简单的将页面划分为上下两个部分。上半部分非常简单,仅为一个大图片。下半部分则相对复杂一些,其中包含该了多个按钮,标签等信息。

页面分割
  • 页面元素:
            <View style={styles.container}>
                {/** 用于放置顶部的大图片 */}
                <View style={styles.topViewContainer}>

                </View>
                {/** 用于与登录相关的按钮 */}
                <View style={styles.bottomViewContainer}>

                </View>
            </View>   
         
  • 样式部分:
    //顶部样式
    topViewContainer: {
        flex:3,
        //距离顶部高度
        marginTop:22,
        alignItems:'center',
        justifyContent:'center',
        backgroundColor:'#1BA261'
    },
    
    //底部样式
    bottomViewContainer: {
        flex:2,
        justifyContent:'flex-start',
        alignItems:'center',
        backgroundColor:'#FFCE44'
    },

在页面的分割过程中,通过使用键flex,将上下两个视图均分了父视图的高度,分别为父视图高度的3/5,与2/5。

绘制上半部分

通过分析页面的上半部分只有一张图片,所以我们将采用Image标签来添加图片。

  • 代码如下:
            <View style={styles.container}>
                {/** 用于放置顶部的大图片 */}
                <View style={styles.topViewContainer}>
                    <Image source={require('./images/login_large_ic.png')}
                           style={styles.topImageStyle}/>
                </View>
                {/** 用于与登录相关的按钮 */}
                <View style={styles.bottomViewContainer}>

                </View>
            </View>
  • 样式部分:
    //顶部图片的样式
    topImageStyle:{
        width:screenWidth * 0.5,
        height:screenWidth * 0.5,
    },
  • 结果展示
上半部分结果展示

在Image标签使用source来加载图片,由于我们使用的是本地图片,所以使用方法require()来读取本地资源。

下半部分绘制-登陆与注册按钮

到目前位置页面的上半部分已经绘制完成,我们将开始绘制页面的下半部分。通过分析页面的下半部分可以拆分为三个部分:

  • 登录按钮
  • 注册按钮
  • 其他登录方式

由于登录,注册按钮的相似性,所以将一起绘制这两个按钮。

  • 绘制代码
                {/** 用于与登录相关的按钮 */}
                <View style={styles.bottomViewContainer}>
                    {/**手机号登录*/}
                    <View style={styles.loginByPhoneBtnContianer}>
                        <Text style={styles.loginByPhoneBtnTitle}>手机号登录</Text>
                    </View>
                    {/**立即注册*/}
                    <View style={styles.registeredBtnContianer}>
                        <Text style={styles.registeredBtnTitle}>立即注册</Text>
                    </View>
                    
                </View>
  • 对应样式
    //手机号登录容器样式
    loginByPhoneBtnContianer:{
        backgroundColor:'#FE3232',
        width:screenWidth * 0.5,
        height:35,
        justifyContent:'center',
        alignItems:'center',
        borderRadius:5
    },
    //按钮文字样式
    loginByPhoneBtnTitle:{
        color:'white',
        fontSize:18
    },
    //立即注册按钮容器样式
    registeredBtnContianer:{
        width:screenWidth * 0.5,
        height:35,
        justifyContent:'center',
        alignItems:'center',
        borderRadius:5,
        borderColor:'#FE3232',
        borderWidth:0.5,
        marginTop:10
    },
    //立即注册按钮文字样式
    registeredBtnTitle:{
        color:'#FE3232',
        fontSize:18
    },
  • 结果展示:
登录与注册按钮的绘制

在两个按钮的绘制过程中,使用了键justifyContent,alignItems来让Text文本始终处于容器的中间,使用borderRadius来设置边框的圆角角度。

下半部分绘制-其他登录方式

该部分可以分成3个部分来分别绘制:

  1. 底部容器视图
  2. 提示标签
  3. 第三方登录按钮组

底部容器视图的绘制

当前操作将在页面的底部绘制一个用来放置提示标签,与第三方登录按钮组的矩形容器。

  • 绘制代码
                <View style={styles.bottomViewContainer}>
                    {/**手机号登录*/}
                    <View style={styles.loginByPhoneBtnContianer}>
                        <Text style={styles.loginByPhoneBtnTitle}>手机号登录</Text>
                    </View>
                    {/**立即注册*/}
                    <View style={styles.registeredBtnContianer}>
                        <Text style={styles.registeredBtnTitle}>立即注册</Text>
                    </View>
                    {/**其他登录方式*/}
                    <View style={styles.loginByOtherContianer}>

                    </View>
                </View>
  • 对应样式
    //其他登录方式的容器
    loginByOtherContianer:{
        width:screenWidth,
        position:'absolute',
        bottom:20,
        alignItems:'center',
        justifyContent:'center',
        backgroundColor:'#17A05E',
        height:100

    },
  • 结果展示
底部容器的绘制

在当前的操作中,通过使用键position,并标示其值为absolute(绝对位置)后,将该容器视图设置在了页面底部,最后通过使用键bottom,将容器的位置最终设置为距离底部20pt的地方。

绘制提示标签

当前操作为绘制一条提示标语

  • 绘制代码
                    {/**其他登录方式*/}
                    <View style={styles.loginByOtherContianer}>
                        {/**其他登录方式标签*/}
                        <View style={{flexDirection:'row',alignItems: 'center'}}>
                            <View style={styles.loginByOtherLine}></View>
                            <Text style={styles.otherLoginHintLabel}>其他方式登录</Text>
                            <View style={styles.loginByOtherLine}></View>
                        </View>

                    </View>
  • 对应样式
    //横线
    loginByOtherLine:{
        backgroundColor:'#999999',
        height:1,
        width:screenWidth*0.25,
        marginLeft:10,
        marginRight:10
    },
    //其他登录方式的提示
    otherLoginHintLabel:{
        color: '#505050',
        fontSize:13
    }
  • 结果展示
提示标语的绘制

绘制第三方登陆按钮

最后一步,绘制第三放登录按钮

  • 绘制代码
                         {/**第三方登录标识*/}
                        <View style={styles.socialLoginBtnContianer}>
                            <Image source={require('./images/ic_qq_login_normal.png')}
                                   style={styles.socialLoginBtnStyle}/>
                            <Image source={require('./images/ic_weibo_login_normal.png')}
                                   style={styles.socialLoginBtnStyle}/>
                            <Image source={require('./images/ic_weixin_login_normal.png')}
                                   style={styles.socialLoginBtnStyle}/>
                            <Image source={require('./images/ic_tencent_login_normal.png')}
                                   style={styles.socialLoginBtnStyle}/>
                            <Image source={require('./images/ic_renren_login_normal.png')}
                                   style={styles.socialLoginBtnStyle}/>
                        </View>
  • 对应样式
    //第三方登录按钮容器
    socialLoginBtnContianer:{
        flexDirection:'row',
        marginTop:10

    },
    //第三方登录按钮的样式
    socialLoginBtnStyle:{
        width:40,
        height:40,
        margin:5
    },
  • 结果展示
绘制完成

内容有点长,感谢观看😄

项目源码地址:https://github.com/wleics/ReactNative-Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容