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閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容