編輯:關於Android編程
android {
....
dataBinding {
enabled = true
}
}

package com.example.administrator.myapplication;
/**
* Created by Administrator on 2016/7/19.
*/
public class Person {
private String name;
private String age;
public Person(String name, String age) {
this.age = age;
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
2)再來看看使用了DataBinding之後的布局文件,其主要的變化是在layout布局文件之中。
布局文件中並沒有給控件定義id,而是用了@{ }的方法。Android studio是如何把值傳進去的呢?在Activity中是又是如何使用的呢? 3)MainActivity .java文件
package com.example.administrator.myapplication;
import android.app.Activity;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import com.example.administrator.myapplication.databinding.ActivityMainBinding;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
Person per = new Person("zhang san", 40);
binding.setPer1(per);//給布局文件name="per1"傳入數據,類型為Person對象
binding.setWork("Teacher");//給布局文件name="work"傳入數據,類型為String字符串
}
}
MainActivity中沒有使用findViewById去指定需要初始化的控件,也沒有使用setText()指定顯示的內容。下面詳細說明一下:
1)使用DataBinding新框架必須導入包:import android.databinding.DataBindingUtil;
2)以前在onCreate方法中通過setContentView設置布局;現在使用DataBindingUtil類的一個靜態方法setContentView設置布局文件,但該方法會返回一個ActivityMainBinding對象。注意ActivityMainBinding對象會根據你的XML布局文件自動生成,其命名規則是這樣的:先將XML布局文件的首字母大寫;然後去掉下劃線,將下劃線後面的第一字母大寫;再加Binding組合而成。如布局文件是activity_main,則對應的類名為:ActivityMainBinding
3)ActivityMainBinding由編譯器根據布局文件的名字自動生成,因此在使用ActivityMainBinding時需要導入該包,一般形式是:當前包名+databinding+ActivityMainBinding
import com.example.administrator.myapplication.databinding.ActivityMainBinding;運行結果效果圖如下:

變量名:name="per1"
注意到TextView的android:text,它的值是一個以@開始,以{}包裹的形式出現,而其內容由per1.name指定。per1就是我們上面定義的variable變量;而name是我們Person類中的一個變量。但name是Person的私有變量啊!!!!其實這裡per1.name實質上調用的是Person類的getName()方法,因此per1.name等價於per1.getName()。因此android:text="@{per1.name}"也可改為android:text="@{per1.getName()}";對於其他控件的分析也如此。
PS:android:text指定的內容為String類型,因此,per1.age是int類型需要轉換為String類型。
2)綁定Variable
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
Person per = new Person("zhang san", 40);
binding.setPer1(per);//給布局文件name="per1"傳入數據,類型為Person對象
binding.setWork("Teacher");//給布局文件name="work"傳入數據,類型為String字符串
}
【注意事項】
【1】 這裡需要注意的是使用binding調用setXxx方法,其中Xxx對應XML布局文件 name="Xxx"或者name="xxx";注意XML文件中name屬性值的首字母可大寫,也可小寫。若 name="Xxx",則 binding.setXxx(),若 name="xxx",也是 binding.setXxx(),但不能寫為 binding.setxxx()。
【2】注意TextView控件設置顯示文字時,若寫為:android:text="@{per1.age}",則會出現錯誤
String resource ID #0x28
這是由於android:text只能接受字符串的屬性值,因此需要轉換一下類型:android:text="@{String.valueOf(per1.age)}"
【3】如果出現以下錯誤,(1)可能是因為你沒有指定資源類型,(2)更大的可能是因為你沒有搭配dataBinding環境!
Error:(27, 31) No resource type specified (at 'text' with value '@{per1.name.toString()}').
android-調用系統的ContentPrivder獲取單張圖片實現剪切做頭像及源碼下載
首先講述這個小項目的特色: 1、調用系統的相冊應用獲取單張圖片 2、對單張圖片進行剪切方便做成指定大小的頭像圖片 3、對獲取圖片的結果進行解析,使用三種方式進行。 首先看
Andriod React Native 樣式表中可用樣式屬性
寫了這麼多篇Android React Native的博文,基本上把復雜的東西都搞定了,接下來來看看一些輕松的東西,和布局有關,就是css樣式,那麼一個View可以設置哪
MUI窗口管理
1、頁面初始化在app開發中,若要使用HTML5+擴展api,必須等plusready事件發生後才能正常使用,mui將該事件封裝成了mui.plusReady()方法,涉
[Android] 你真的了解Activity嗎?
Activity是什麼?我們都知道android中有四大組件(Activity 活動,Service 服務,Content Provider 內容提供者,Broadcas