日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
一覺醒來Kotlin成了Android的新寵兒【附代碼】

前言

凌晨的谷歌I/O 2017開發(fā)者大會(huì)直播你有沒有觀看呢?安卓雖然已經(jīng)成為了移動(dòng)設(shè)備***操作系統(tǒng),全球采用Android操作系統(tǒng)的激活設(shè)備超過了20億臺(tái)。不過對(duì)于谷歌來說,需要依靠java來做安卓開發(fā)一直是一個(gè)心病,因?yàn)閛racle公司因?yàn)閖ava和谷歌在安卓系統(tǒng)上的訴訟搞得心力憔悴。

現(xiàn)在好了,谷歌官方正式支持Kotlin,成為官方認(rèn)可的安卓開發(fā)***語言,而且從Android Studio 3.0開始,將直接集成Kotlin而無需安裝任何的插件。

正文

開始做安卓UI開發(fā)一直是使用XML文件來實(shí)現(xiàn)。雖然理論上,UI可以使用Java語言來實(shí)現(xiàn),但并沒有太多的用處。不久前,JetBrains推出了Kotlin,一種面向JVM的現(xiàn)代語言,可以很好的實(shí)現(xiàn)安卓UI。

Jetbrains宣稱Anko是Android中更快,更輕松的開發(fā)風(fēng)格。Kotlin提供Anko庫(kù)來作為DSL(領(lǐng)域?qū)S谜Z言)去設(shè)計(jì)安卓界面,一個(gè)簡(jiǎn)單的例子:

下面的界面由一個(gè)圖片和一個(gè)按鈕組成:

使用Anko實(shí)現(xiàn)如下:

 
 
 
 
  1. verticalLayout{
  2.        imageView(R.drawable.anko_logo).
  3.                 lparams(width= matchParent) {
  4.                     padding = dip(20)
  5.                     margin = dip(15)
  6.         }
  7.         button("Tap to Like") {
  8.                 onClick { toast("Thanks for the love!") }
  9.         }
  10.     } 

我們定義了一個(gè)垂直的線性布局作為容器包含圖片和按鈕,使用lparams定義了布局的位置信息,由Kotlin的內(nèi)聯(lián)函數(shù)也實(shí)現(xiàn)了按鈕的點(diǎn)擊事件。

使用Anko的優(yōu)點(diǎn):

  • 我們可以將UI布局嵌入到代碼中,從而使其類型安全。
  • 由于我們不用XML編寫,所以它增加了效率,因?yàn)樵诜治鯴ML浪費(fèi)CPU時(shí)間。
  • 在UI的程序化轉(zhuǎn)換之后,我們可以將Anko DSL片段放入一個(gè)函數(shù)中。這樣便于代碼重用。
  • 顯然,代碼更簡(jiǎn)潔,可讀和可掌握性更高。

現(xiàn)在我們使用Anko Layout和Kotlin構(gòu)建一個(gè)to-do app,來列出我們今天需要做的事。

你可以在GitHub上找到這個(gè)項(xiàng)目 to-do app

將Anko庫(kù)添加到Android Studio:

在streamline-android-java-code-with-kotlin去學(xué)習(xí)如何添加Kotlin到你的安卓項(xiàng)目中,有了Kotlin,我們需要添加Anko依賴在app/build.gradle中,這樣我們就可以順利編譯項(xiàng)目了。

 
 
 
 
  1. compile [size=1em]'org.jetbrains.anko:anko-sdk15:0.8.3'
  2. // sdk19,21,23 也可以使用

可以根據(jù)你項(xiàng)目的minSdkVersion來添加這個(gè)依賴,上面的例子說明15<=minSdkVersion<19,你可以在Anko的GitHub庫(kù)中找到自己需要的其他Anko依賴庫(kù)。

我們準(zhǔn)備使用下面的依賴庫(kù):

 
 
 
 
  1. compile 'org.jetbrains.anko:anko-design:0.8.3'
  2. compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.3'

在Activity中調(diào)用Anko布局:

我們不再使用XML來寫布局文件,所以我們不需要XML View,所以也不需要findViewById()方法了。這里我們假設(shè)我們的Anko布局類為MainUI,然后我們可以開始寫我們的activit內(nèi)容:

 
 
 
 
  1. var ui =MainUI()           //MainUI類代替了XML布局
  2. ui.setContentView(this)   //this代表Activity類

現(xiàn)在我們創(chuàng)建一個(gè)Kotlin文件MainActivity.kt,寫上如下代碼:

 
 
 
 
  1. class MainActivity : AppCompatActivity() {    val task_list = ArrayList()         //任務(wù)清單表
  2.     override fun onCreate(savedInstanceState: Bundle?) {
  3.        super.onCreate(savedInstanceState)
  4.        savedInstanceState?.let {           val arrayList = savedInstanceState.get("ToDoList")
  5.            task_list.addAll(arrayList as List)
  6.        }       var adapter=TodoAdapter(task_list)      //定義適配器
  7.        var ui = MainUI(adapter)                //定義將要使用的Anko UI 布局
  8.        ui.setContentView(this)                 //給Activity設(shè)置Anko布局
  9.    }   override fun onSaveInstanceState(outState: Bundle?) {
  10.        outState?.putStringArrayList("ToDoList", task_list)
  11.        super.onSaveInstanceState(outState)
  12.      }
  13.  } 

task_list是ArrayList,將填充ListView的TodoAdapter。MainUI(adapter)是我們的Anko UI文件,它采用TodoAdapter類作為適配器參數(shù)。所以,接下來我們?cè)賱?chuàng)建一個(gè)TodoAdapter類。

用于ListView的TodoAdapter適配器

TodoAdapter類有一個(gè)ArrayList類型的list,并且繼承了BaseAdapter。所以我們需要重寫一下四個(gè)方法:

public int getCount()public Object getItem(int i)public long getItemId(int i)public View getView(int i, View view, ViewGroup viewGroup)

在getView()方法中我們需要使用Anko設(shè)計(jì)一個(gè)表元素的布局。

 
 
 
 
  1. public int getCount()public Object getItem(int i)public long getItemId(int i)public View getView(int i, View view, ViewGroup viewGroup)
  2.         在getView()方法中我們需要使用Anko設(shè)計(jì)一個(gè)表元素的布局。
  3. override fun getView(i : Int, v : View?, parent : ViewGroup?) : View {
  4.               return with(parent!!.context) {              //任務(wù)數(shù)從1開始
  5.               var taskNum: Int = i +1
  6.              //清單表元素布局
  7.              linearLayout {
  8.                    lparams(width = matchParent, height = wrapContent)
  9.                    padding = dip(10)
  10.                    orientation = HORIZONTAL                   //任務(wù)號(hào)
  11.                   textView {
  12.                        id = R.id.taskNum
  13.                        text=""+taskNum
  14.                        textSize = 16f
  15.                        typeface = Typeface.MONOSPACE
  16.                        padding =dip(5)
  17.                   }                  //任務(wù)名
  18.                   textView {
  19.                         id = R.id.taskName
  20.                        text=list.get(i)
  21.                        textSize = 16f
  22.                        typeface = DEFAULT_BOLD
  23.                        padding =dip(5)
  24.                   }
  25.              }
  26.          }
  27.       }
  • 在這個(gè)方法中,我們返回一個(gè)包含一個(gè)horizontalListView布局列表項(xiàng)的視圖。這是使用Kotlin的with語法完成的,它允許我們一次在對(duì)象實(shí)例上調(diào)用很多方法。
  • 每個(gè)列表項(xiàng)包含兩個(gè)textview用于顯示任務(wù)號(hào)和任務(wù)名稱。
  • linearLayout,textView是擴(kuò)展功能。擴(kuò)展功能使我們有能力啟用具有新功能的任何類。
  • text,textSize,typeface在android.widget.TextView有g(shù)etter和setter方法,padding是Anko添加的屬性。

繼續(xù)下一步,我們需要定義列表的操作功能。因此,我們需要在TodoAdapter中定義add(String)和delete(Int)方法。add(String)將任務(wù)名稱作為參數(shù)添加到任務(wù)中。delete(Int)將任務(wù)所在的位置作為參數(shù)來刪除任務(wù)。下面是具體的實(shí)現(xiàn):

 
 
 
 
  1. //將任務(wù)添加到任務(wù)清單的方法     
  2.  fun add(text: String) {         
  3.        list.add(list.size, text)         
  4.        notifyDataSetChanged()          //更新數(shù)據(jù)    }       //將任務(wù)從任務(wù)清單中移除的方法     
  5.  fun delete(i:Int) {        
  6.        list.removeAt(i)         
  7.        notifyDataSetChanged()          //更新數(shù)據(jù)     
  8.  } 

所以,現(xiàn)在我們?cè)O(shè)計(jì)了列表,我們也可以添加和刪除項(xiàng)目到我們的列表中。接下來完成此適配器類的代碼。

  1.  TodoAdapter(val list: ArrayList = ArrayList()) : BaseAdapter() {    
  2.                override fun getView(i : Int, v : View?, parent : ViewGroup?) : View {        
  3.                          return with(parent!!.context) {            
  4.                                    //taskNum will serve as the S.No. of the list starting from 1            
  5.                                    var taskNum: Int = i +1           
  6.                                    //Layout for a list view item            
  7.                                    linearLayout {                
  8.                                           id = R.id.listItemContainer                
  9.                                           lparams(width = matchParent, height = wrapContent)                
  10.                                           padding = dip(10)                
  11.                                           orientation = HORIZONTAL                
  12.                                              textView {                    
  13.                                                    id = R.id.taskNum                   
  14.                                                    text=""+taskNum                   
  15.                                                    textSize = 16f                  
  16.                                                    typeface = Typeface.MONOSPACE                
  17.                                                    padding =dip(5)               
  18.                                              }                
  19.                                           textView {                   
  20.                                                   id = R.id.taskName                   
  21.                                                   text=list.get(i)                   
  22.                                                   textSize = 16f                    
  23.                                                   typeface = DEFAULT_BOLD                   
  24.                                                   padding =dip(5)                

    當(dāng)前題目:一覺醒來Kotlin成了Android的新寵兒【附代碼】
    轉(zhuǎn)載注明:http://www.5511xx.com/article/ccdiije.html