kotlin--快速實(shí)現(xiàn)App框架

前言
加入Adroid開(kāi)發(fā)這個(gè)陣營(yíng)已經(jīng)快兩年了,一直使用Java開(kāi)發(fā)童芹,之前也學(xué)過(guò)Kotlin涮瞻,但并沒(méi)有真正運(yùn)用于項(xiàng)目實(shí)踐,Kotlin在實(shí)際使用中還是有利有弊的假褪,習(xí)慣使用Java開(kāi)發(fā)來(lái)說(shuō)署咽,Java更順手。最近重溫Kotlin嗜价,下面的Demo是利用實(shí)現(xiàn)App的框架艇抠,即所謂底部導(dǎo)航。

效果圖

開(kāi)始
底部導(dǎo)航我們采用ViewPager+Fragment實(shí)現(xiàn)久锥,具體看代碼家淤。

MainActivity的布局activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent" android:layout_height="match_parent"

        android:orientation="vertical">

    <android.support.v4.view.ViewPager
            android:layout_weight="1"
            android:id="@+id/vpMain"
            android:layout_width="match_parent"
            android:layout_height="0dp"/>


    <android.support.design.widget.TabLayout
            android:background="@color/colorWhite"
            android:id="@+id/tlMain"
            app:tabIndicatorColor="@color/colorWhite"
            android:layout_width="match_parent"
            android:layout_height="50dp"/>

</LinearLayout>

在布局中我們主要是使用控件ViewPager+TabLayout使用基本框架。所以我們需要在build.gradle添加下面依賴:

    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:appcompat-v4:28.0.0'

我們注意到在TabLayout中瑟由,我們?cè)O(shè)置tabIndicatorColor與背景一樣的顏色絮重,主要是為了在視覺(jué)隱藏底部導(dǎo)航欄的指示器。

接下來(lái)是MainActivity的實(shí)現(xiàn)歹苦,ViewPager容量的大小即Fragment的數(shù)量大家可根據(jù)自己的需求進(jìn)行定義青伤。

MainActivity的實(shí)現(xiàn)

class MainActivity : BaseActivity() {

    var fragments: MutableList<BaseFragment>? = null

    //底部要顯示的標(biāo)題
    var titles: MutableList<String>? = null
    
    //底部要顯示的icon
    var icons: MutableList<String>? = null

    var adapter: MainAdapter? = null

    override fun setResourceId(): Int = R.layout.activity_main

    override fun preInitData() {
        fragments = mutableListOf(MainFragment(), MainFragment(), MainFragment(), MainFragment())


        titles = mutableListOf("首頁(yè)", "時(shí)間軸", "發(fā)現(xiàn)", "我的")

        icons = mutableListOf(
            resources.getString(R.string.home),
            resources.getString(R.string.timeline),
            resources.getString(R.string.found),
            resources.getString(R.string.me)
        )
        adapter = MainAdapter(this, fragments!!, titles!!, supportFragmentManager)

    }

    override fun initViews() {

        vpMain.adapter = adapter

        tlMain.setupWithViewPager(vpMain)

        initBottomView()

    }
    /**
     * 初始底部的導(dǎo)航欄視圖
     */
    private fun initBottomView() {

        val iconFont = Typeface.createFromAsset(assets, "tab.ttf")

        for ((index) in fragments!!.withIndex()) {
            val view = LayoutInflater.from(this).inflate(R.layout.layout_main_tab, null, false)

            val tvHome = view.findViewById<TextView>(R.id.tvIcon)

            tvHome.text = icons!![index]

            tvHome.typeface = iconFont

            val tvText = view.findViewById<TextView>(R.id.tvText)

            tvText.text = titles!![index]

            tlMain.getTabAt(index)!!.customView = view
        }
    }

    override fun initListener() {
    }

    override fun initData() {
    }

}

變量fragments用于存儲(chǔ)要展示的Fragment,變量titles持有底部導(dǎo)航欄的標(biāo)題殴瘦,而icons主要用于持有底部icon狠角,并分別在函數(shù)preInitData中進(jìn)行初始化。在initViews函數(shù)初始類型為 MainAdapter的適配器adapter蚪腋,并設(shè)置給了ViewPager,同時(shí)將ViewPagerTabLayout相關(guān)聯(lián)丰歌。
接下來(lái)initBottomView函數(shù),底部導(dǎo)航欄的初始化屉凯,也是本篇文章的重點(diǎn)立帖。
安裝以往的習(xí)慣,我一般會(huì)在網(wǎng)上下載八個(gè)pngicon悠砚,對(duì)應(yīng)四個(gè)模塊的選中狀態(tài)和沒(méi)有選中狀態(tài)晓勇。而這次采用icon-font來(lái)實(shí)現(xiàn)。
第一步灌旧,從網(wǎng)上到icon-font或者UI工程師和對(duì)應(yīng)的ttf文件和字符串绑咱。下面推薦一個(gè):
網(wǎng)站 http://iconfont.cn/
教程 http://iconfont.cn/help/detail?spm=a313x.7781069.1998910419.d8d11a391&helptype=code
根據(jù)提示在string文件中添加

    <string name="home">&#xe6ce;</string>
    <string name="found">&#xe608;</string>
    <string name="me">&#xe605;</string>
    <string name="timeline">&#xe649;</string>

在代碼for循環(huán)中主要是實(shí)行自定義TabLayout的customView視圖,以達(dá)到我們想要的效果。
tlMain.getTabAt(index)!!.customView = view

layout_main_tab實(shí)現(xiàn)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:gravity="center"
              android:orientation="vertical"
              android:layout_height="match_parent">

    <TextView
            android:paddingTop="2dp"
            android:id="@+id/tvIcon"
            android:gravity="center"
            android:text=""
            android:textColor="@color/tab_text_color"
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    <TextView
            android:layout_marginTop="2dp"
            android:id="@+id/tvText"
            android:gravity="center"
            android:text=""
            android:textSize="8sp"
            android:textColor="@color/tab_text_color"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

</LinearLayout>

通過(guò)上面的步驟节榜,基本就可以在半小時(shí)內(nèi)快速實(shí)現(xiàn)一個(gè)基本的框架羡玛。

代碼很簡(jiǎn)單,方便新手入門(mén)宗苍。不懂可以提問(wèn)哦~

Demo代碼<git@github.com:zhangwenshuan/App.git>

喜歡就Star哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稼稿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子讳窟,更是在濱河造成了極大的恐慌让歼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丽啡,死亡現(xiàn)場(chǎng)離奇詭異谋右,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)补箍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)改执,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)啸蜜,“玉大人,你說(shuō)我怎么就攤上這事辈挂〕暮幔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵终蒂,是天一觀的道長(zhǎng)蜂林。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拇泣,這世上最難降的妖魔是什么噪叙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮霉翔,結(jié)果婚禮上睁蕾,老公的妹妹穿的比我還像新娘。我一直安慰自己债朵,他們只是感情好惫霸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著葱弟,像睡著了一般壹店。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芝加,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天硅卢,我揣著相機(jī)與錄音,去河邊找鬼藏杖。 笑死将塑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝌麸。 我是一名探鬼主播点寥,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼来吩!你這毒婦竟也來(lái)了敢辩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弟疆,失蹤者是張志新(化名)和其女友劉穎戚长,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體怠苔,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡同廉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迫肖。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锅劝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蟆湖,到底是詐尸還是另有隱情鸠天,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布帐姻,位于F島的核電站沈跨,受9級(jí)特大地震影響谜悟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涮毫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一痹籍、第九天 我趴在偏房一處隱蔽的房頂上張望呢铆。 院中可真熱鬧,春花似錦蹲缠、人聲如沸棺克。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娜谊。三九已至,卻和暖如春斤讥,著一層夾襖步出監(jiān)牢的瞬間纱皆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工芭商, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铛楣。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓近迁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親簸州。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鉴竭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料岸浑? 從這篇文章中你...
    hw1212閱讀 12,723評(píng)論 2 59
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,117評(píng)論 25 707
  • 又到了畫(huà)圖的時(shí)間了拓瞪,今天我們要做的是,改變世界的蘋(píng)果助琐。這是第二天的作業(yè)祭埂,重點(diǎn)的是要做發(fā)散思維,做一些思維的發(fā)散的訓(xùn)...
  • 每個(gè)人都有自己的思維方式舌界,這與我們的經(jīng)歷、成長(zhǎng)過(guò)程有關(guān)泰演。就是針對(duì)相同的事呻拌,由于思維的方式不同,產(chǎn)生的結(jié)果也不同睦焕。而...
    下半輩子_閱讀 711評(píng)論 0 1
  • 核心動(dòng)畫(huà)藐握,也是iOS常用的東西。但以前的時(shí)候居然很少用到垃喊,唉猾普。在此需好好記錄一下。 Core Animation本谜,...
    七號(hào)蘿卜閱讀 255評(píng)論 0 2