編輯:關於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
首先講述這個小項目的特色: 1、調用系統的相冊應用獲取單張圖片 2、對單張圖片進行剪切方便做成指定大小的頭像圖片 3、對獲取圖片的結果進行解析,使用三種方式進行。 首先看
寫了這麼多篇Android React Native的博文,基本上把復雜的東西都搞定了,接下來來看看一些輕松的東西,和布局有關,就是css樣式,那麼一個View可以設置哪
1、頁面初始化在app開發中,若要使用HTML5+擴展api,必須等plusready事件發生後才能正常使用,mui將該事件封裝成了mui.plusReady()方法,涉
Activity是什麼?我們都知道android中有四大組件(Activity 活動,Service 服務,Content Provider 內容提供者,Broadcas