編輯:關於Android編程
跟著官方教程學習數據綁定的用法,功能確實非常強大,這是 Android 向 MVVM 邁出的一大步,也是 Native 的開發方式逐漸向 Web 靠攏的一小步。
其中一個綁定方式是直接使用資源數據,例如:
android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"
官方教程截圖:
完整版的布局文件如下:
largePadding
和 smallPadding
都是定義在 dimens.xml
文件中的資源數據。
20dp
5dp
在 Java 代碼中與綁定 large 變量,並賦值為 ture
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ResourceBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_resource);
binding.setLarge(true);
}
理論上,這樣做應該沒什麼問題,但是 Run 工程的時候,出現錯誤,報錯信息如下:
cannot find the setter for attribute 'android:padding' on android.widget.TextView with parameter type float.
看來像是 DataBinder 把 @dimen/largePadding
解析成了 float
類型,可以試一下類型轉換:
android:padding="@{large? (int)@dimen/largePadding : (int)@dimen/smallPadding}"
編譯通過,運行結果也正確,應該是 DataBinder 出 bug 了,原來資源綁定還有這麼高級的用法,可以直接進行類型轉換 - (int)@dimen/largePadding
。
感覺好神奇,必須讀讀源碼,了解一下 DataBinder 的實現原理。
由於項目上的需要側滑條目展示收藏按鈕,記得之前代碼家有寫過一個厲害的開源控件 AndroidSwipeLayout 本來准備直接拿來使用,但是看過 issue 發現現在有
好吧,終於要開始講解Activity的啟動流程了,Activity的啟動流程相對復雜一下,涉及到了Activity中的生命周期方法,涉及到了Android體系的CS模式,
目前Android平台上進行人臉特征識別非常火爆,本人研究生期間一直從事人臉特征的處理,所以曾經用過一段ASM(主動形狀模型)提取人臉基礎特征點,所以這裡采用JNI的方式
FloatingActionButton項目在github上的主頁:https://github.com/futuresimple/android-floating-ac