編輯:關於android開發
原文標題:Kotlin for Android (IV): Custom Views and Android Extensions
原文鏈接:http://antonioleiva.com/kotlin-android-custom-views/
原文作者:Antonio Leiva(http://antonioleiva.com/about/)
原文發布:2015-05-07
在閱讀了擴展函數和默認值能做什麼後,你可能想知道接下來是什麼。如我們在Kotlin的第一篇文章說的那樣,該語言可以使得Android開發更簡單,所以還有很多事情我想談談。
如果你還記得,在談論Kotlin局限性時,我提到Kotlin前期版本(直至M10版本)不能夠創建定制視圖。其原因是我們只有一個選擇:每個類僅能創建一個構造函數。由於使用可選參數,我們能按照自己需要產生構造函數的各種變化,通常,這就足夠了。這裡有一個例子:
1 class MyClass(param: Int, optParam1: String = "", optParam2: Int = 1) 2 { 3 init { 4 // Initialization code 5 } 6 }
現在用唯一的構造函數,我們可以有四種方法產生類:
1 val myClass1 = MyClass(1) 2 val myClass2 = MyClass(1, "hello") 3 val myClass3 = MyClass(param = 1, optParam2 = 4) 4 val myClass4 = MyClass(1, "hello", 4)
如你所見,我們只是用可選參數就得到很多組合。但是,如果我們試圖通過擴展普通視圖來創建Android定制視圖,就帶來一個問題。為了正確地工作,定制視圖需要重載多個構造函數,我們沒有方法實現它。幸好,從M11版本開始,我們有類似Java的方法,可聲明多個構造函數了。下面是維持正方形比例的ImageView例子:
1 class SquareImageView : ImageView { 2 3 public constructor(context: Context) : super(context) { 4 } 5 6 public constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { 7 } 8 9 public constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { 10 } 11 12 override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { 13 super.onMeasure(widthMeasureSpec, heightMeasureSpec) 14 val width = getMeasuredWidth() 15 setMeasuredDimension(width, width) 16 } 17 }
十分簡單吧。但或許不太詳細,不過至少我們現在有方法實現了。
在Kotlin M11版本中,還增加一個新插件,它可以幫助我們(Android開發者)以更便捷方法訪問在XML中聲明的視圖。在你們遇到Butterknife時,有些人是會記住它使用起來更簡單。
Kotlin Android擴展實際就是視圖綁定。在代碼中,它允許你通過視圖的id就能用XML視圖。不需要用任何外部注釋或findViewById方法就可自動創建它們的屬性。
要使用新插件,你需要安裝Kotlin Android Extensions並將新的classpath添加到buildscript依賴關系中(在你的主build.gradle中):
1 buildscript { 2 … 3 dependencies { 4 … 5 classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" 6 } 7 }
假設你要聲明下面main.xml</strong/>布局:
1 <FrameLayout 2 xmlns:android="..." 3 android:id="@+id/frameLayout" 4 android:orientation="vertical" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent"> 7 8 <TextView 9 android:id="@+id/welcomeText" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content"/> 12 13 </FrameLayout>
如果你要在Activity中使用這些視圖,你只需要導入這個xml文件的symthetic屬性:
1 import kotlinx.android.synthetic.<xml_name>.*
在我們例子中,它就是main:
1 import kotlinx.android.synthetic.main.*
你現在就可以用視圖的id訪問它:
1 override fun onCreate(savedInstanceState: Bundle?) { 2 super<BaseActivity>.onCreate(savedInstanceState) 3 setContentView(R.id.main) 4 frameLayout.setVisibility(View.VISIBLE) 5 welcomeText.setText("I´m a welcome text!!") 6 }
這兩項新特性的實現,明確地表明Kotlin團隊非常感興趣改善Android開發者的生活,讓他們的生活更加輕松自如。他們還發布了Anko庫,用DSL從Kotlin文件創建Android布局。我還沒有使用過它的主要功能,但是在處理Android視圖時,你可以用它來簡化你的代碼,在我上傳到Github中的Kotlin項目裡有一些它的例子。你可以找到這些例子以及其他許多東西。
下一篇文章將討論Lambda表達式的使用以及它們怎樣幫助我們簡化代碼和擴展編程語言。這十分有趣!對於我來說,與Java 1.7比較這是Kotlin最強大的一面。
前一篇:http://www.cnblogs.com/figozhg/p/4996136.html
Android四大視圖動畫圖文詳解 Android中的動畫分為視圖動畫(View Animation)、屬性動畫(Property Animation)以及Drawa
對圖片進行各種樣式裁對圖片進行各種樣式裁剪:圓形、星形、心形、花瓣形等剪:圓形、星形、心形、花瓣形等--第三方開源--CustomShapeImageView, Cust
ImageSwitcher的簡單使用, 測試代碼: activity_main.xml: <?xml version=1.0 encoding=ut
Android Design Support Library——TabLayout,androidtablayout TabLayout——選項