kotlin開發(fā)總結(jié)

目錄

  • 常用數(shù)組的創(chuàng)建
  • Recyclerview中GridLayoutManager間距設(shè)置
  • 設(shè)置自己應(yīng)用為luncher
  • Android 屏幕適配方案
  • Android控件Style
  • 設(shè)置androidstudio自帶模擬器相應(yīng)的dpi
  • 彈框總結(jié)
  • ConstraintLayout
  • 安卓開機(jī)自動(dòng)啟動(dòng)app
  • kotlin中重寫接口的寫法
  • kotlin json轉(zhuǎn)bean

<span id="jump">跳轉(zhuǎn)到的地方</span>

常用數(shù)組的創(chuàng)建:

創(chuàng)建values中的arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    //首頁條目圖片id
    <string-array  name="home_item_images">
        <item>@drawable/home_item_training</item>
        <item>@drawable/home_item_training</item>
        <item>@drawable/home_item_training</item>
        <item>@drawable/home_item_training</item>
        <item>@drawable/home_item_training</item>
        <item>@drawable/home_item_training</item>
        <item>@drawable/home_item_training</item>
        <item>@drawable/home_item_training</item>
    </string-array>
    //首頁條目題目
    <string-array name="home_item_titles">
        <item>培訓(xùn)</item>
        <item>人員信息</item>
        <item>運(yùn)營圖</item>
        <item>通知</item>
        <item>車站信息</item>
        <item>圖片文件</item>
        <item>車站文件</item>
        <item>設(shè)置</item>
    </string-array>
</resources>

//獲取TITLE數(shù)組

var titlesDes: Array<String> = App.mContext.resources.getStringArray(R.array.home_item_titles)
var images = App.mContext.resources.obtainTypedArray(R.array.home_item_images)

創(chuàng)建存儲(chǔ)title和icon的類

data class HomeItem(var title: String, var imageResource: Int)

創(chuàng)建一個(gè)集合存儲(chǔ)HomeItem
var mDataList = ArrayList<HomeItem>()
存儲(chǔ)到list中

titlesDes.indices
               .map { HomeItem(titlesDes[it],images.getResourceId(it, 0)) }
               .forEach { mDataList.add(it) }
  • 獲取像素密度
//獲得手機(jī)的寬度和高度像素單位為px
    // 通過WindowManager獲取
    fun getScreenDensity_ByWindowManager() {
        val mDisplayMetrics = DisplayMetrics()//屏幕分辨率容器
        windowManager.defaultDisplay.getMetrics(mDisplayMetrics)
        val width = mDisplayMetrics.widthPixels
        val height = mDisplayMetrics.heightPixels
        val density = mDisplayMetrics.density
        val densityDpi = mDisplayMetrics.densityDpi
        Log.d("haha", "Screen Ratio: [" + width + "x" + height + "],density=" + density + ",densityDpi=" + densityDpi)
        Log.d("haha", "Screen mDisplayMetrics: " + mDisplayMetrics)
    }
Recyclerview中GridLayoutManager間距設(shè)置

Recyclerview我用的BRVH

//BRVH的引入
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.22'
//recyclerview引入
compile 'com.android.support:recyclerview-v7:25.3.1'

默認(rèn)是等間分配的,都是等距



給設(shè)置左側(cè)間距變?yōu)?00的時(shí)候就變成上圖那樣了,下面看代碼實(shí)現(xiàn):

  • 先設(shè)置ItemDecoration
homeRecyclerView.addItemDecoration(SpaceItemDecoration(100))
  • 編寫SpaceItemDecoration繼承RecyclerView.ItemDecoration
class SpaceItemDecoration(var space: Int) : RecyclerView.ItemDecoration() {

    override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
        when (parent.getChildAdapterPosition(view) % 4) {
            0 -> outRect.left = 0 //第一列左邊貼邊(默認(rèn)狀態(tài))
            1 -> outRect.left = space//第二列移動(dòng)一個(gè)space
            2 -> outRect.left = space * 2//第三列移動(dòng)二個(gè)space
            3 -> outRect.left = space * 3//第四列移動(dòng)三個(gè)space
        }

        if (parent.getChildAdapterPosition(view) >= 4) {
            outRect.top = dip2px(40f)//檔超過一排后,剩下的每排距離上面一排增加40高度
        } else {
            outRect.top = 0   //第一排不變
        }
    }
}

知道這些后就好辦了直接按照自己需求設(shè)置就可以了

設(shè)置自己應(yīng)用為luncher

很簡單只需要在AndroidManifest.xml里的MainActivity<intent-filter>節(jié)點(diǎn)下添加以下代碼:

<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />

添加完了之后的代碼:

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</activity>

上面代碼設(shè)置完就可以設(shè)置下默認(rèn)桌面


設(shè)置之后還要屏蔽掉

Android 屏幕適配方案

利用autolayout.jar
Java -jar xx.jar width height width,height_width,height
第一個(gè)為標(biāo)準(zhǔn)圖的寬高 接下來的像素就是需要添加的像素

Android控件Style

 <!--首頁上面標(biāo)題樣式-->
    <style name="HomeTitleStyle">
        <item name="android:textSize">28sp</item>
        <item name="android:textColor">#d3d3d3</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_centerInParent">true</item>
    </style>

在需要顯示相同效果的地方運(yùn)用

 <TextView
      style="@style/HomeTitleStyle"
      android:text="@string/home_toolbar_title1" />

設(shè)置androidstudio自帶模擬器相應(yīng)的dpi

在大屏設(shè)備的適配中,往往自帶的模擬器是滿足不了的,例如當(dāng)知道用戶需要的設(shè)備是160dpi的像素密度,55寸顯示屏,我們不可能時(shí)刻帶著設(shè)備處理問題,就需要更改模擬器自帶的Tv模擬器

  • 首先創(chuàng)建一個(gè)1920*1080的模擬器
  • 去用戶目錄下找到設(shè)備的C:\Users\.android\avd\Android_TV_1080p_API_23.avd
    打開其中的cache.img文件,找到其中的hw.lcd.density=160這樣就設(shè)置好了dpi為160了

彈框總結(jié)

自定義Dialog實(shí)現(xiàn)步驟及封裝
Android 封裝一個(gè)通用的PopupWindow
Android PopupWindow詳解

獲取dialog里面的布局控件要在show之后才有效否則為null

mStationDialog.setOnShowListener(object : DialogInterface.OnShowListener {
                override fun onShow(dialog: DialogInterface?) {            
                       val tvZhanQu1 = mStationDialog.findViewById(R.id.tvZhanQu1) as TextView//小箭頭

                }
            })

ConstraintLayout

  • 位于Inspector最中間的那個(gè)正方形區(qū)域,它是用來控制控件大小的杈绸。一共有三種模式可選帖蔓,每種模式都使用了一種不同的符號(hào)表示,點(diǎn)擊符號(hào)即可進(jìn)行切換瞳脓。


    表示wrap content塑娇,這個(gè)我們很熟悉了,不需要進(jìn)行什么解釋劫侧。


    表示固定值埋酬,也就是給控件指定了一個(gè)固定的長度或者寬度值。

    表示any size烧栋,它有點(diǎn)類似于match parent写妥,但和match parent并不一樣,是屬于ConstraintLayout中特有的一種大小控制方式劲弦,any size是用于填充滿當(dāng)前控件的約束規(guī)則耳标,而match——parent是填充整個(gè)父控件

安卓開機(jī)自動(dòng)啟動(dòng)app

  • 1 新建一個(gè)類繼承BroadcastReceiver, 監(jiān)聽系統(tǒng)的BOOT_COMPLETED

/**
 * 檢測開機(jī)啟動(dòng)
 */
class BootBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action.equals("android.intent.action.BOOT_COMPLETED")) {
            val mainActivityIntent = Intent(context, MainActivity::class.java)
            mainActivityIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            context.startActivity(mainActivityIntent)
        }
    }
}

2 在配置文件中添加權(quán)限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

3 在配置文件中注冊receiver

<receiver android:name=".receiver.BootBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

kotlin中重寫接口的寫法

kotlin中重寫接口的時(shí)候要用object來表達(dá)

mStationDialog.setOnShowListener(object : DialogInterface.OnShowListener {
                override fun onShow(dialog: DialogInterface?) {
                    tvZhanQuShow = mStationDialog.findViewById(R.id.tvZhanQuShow) as TextView
                }
            })

kotlin json轉(zhuǎn)bean

http://www.demojameson.com/2017/05/29/convert-json-to-kotlin-data-class/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邑跪,隨后出現(xiàn)的幾起案子次坡,更是在濱河造成了極大的恐慌,老刑警劉巖画畅,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砸琅,死亡現(xiàn)場離奇詭異,居然都是意外死亡轴踱,警方通過查閱死者的電腦和手機(jī)症脂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诱篷,你說我怎么就攤上這事壶唤。” “怎么了棕所?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵闸盔,是天一觀的道長。 經(jīng)常有香客問我琳省,道長迎吵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任针贬,我火速辦了婚禮击费,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桦他。我一直安慰自己蔫巩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布瞬铸。 她就那樣靜靜地躺著批幌,像睡著了一般础锐。 火紅的嫁衣襯著肌膚如雪嗓节。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天皆警,我揣著相機(jī)與錄音拦宣,去河邊找鬼。 笑死信姓,一個(gè)胖子當(dāng)著我的面吹牛鸵隧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播意推,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼豆瘫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菊值?” 一聲冷哼從身側(cè)響起外驱,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腻窒,沒想到半個(gè)月后昵宇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡儿子,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瓦哎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒋譬,死狀恐怖割岛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情犯助,我是刑警寧澤蜂桶,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站也切,受9級(jí)特大地震影響扑媚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雷恃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一疆股、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倒槐,春花似錦旬痹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至把跨,卻和暖如春人弓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背着逐。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工崔赌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耸别。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓健芭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秀姐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慈迈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,151評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,762評(píng)論 22 665
  • 原文鏈接:https://github.com/opendigg/awesome-github-android-u...
    IM魂影閱讀 32,940評(píng)論 6 472
  • 一棵樹拂過秋風(fēng),搖落了葉省有。 一只貓路過行人痒留,留下了心。 冷日告別薄霧锥咸, 又與漫天陰云昏昏同眠狭瞎。 小魚干在掌紋間游走...
    知筆閱讀 369評(píng)論 1 2
  • 早安
    情木子閱讀 119評(píng)論 0 0