編輯:關於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四大視圖動畫圖文詳解 Android中的動畫分為視圖動畫(View Animation)、屬性動畫(Property Animation)以及Drawa
對圖片進行各種樣式裁對圖片進行各種樣式裁剪:圓形、星形、心形、花瓣形等剪:圓形、星形、心形、花瓣形等--第三方開源--CustomShapeImageView,
對圖片進行各種樣式裁對圖片進行各種樣式裁剪:圓形、星形、心形、花瓣形等剪:圓形、星形、心形、花瓣形等--第三方開源--CustomShapeImageView, Cust
ImageSwitcher的簡單使用,
ImageSwitcher的簡單使用, 測試代碼: activity_main.xml: <?xml version=1.0 encoding=ut
Android Design Support Library——TabLayout,androidtablayout
Android Design Support Library——TabLayout,androidtablayout TabLayout——選項