Inflater 英文意思是膨脹,在Android 中應該是擴充的意思吧。LayoutInflater的作用類似於findViewById(),不同點是LayoutInflater是用來找layout檔案夾下的xml 布局檔案,並且執行個體化!而findViewById()是找具體某一個xml 下的具體widget 控制項(如:Button,TextView 等)。
LayoutInflater inflater = LayoutInflater.from(this);
View view=inflater.inflate(R.layout.ID, null);
或者乾脆並成一句:
View view=LayoutInflater.from(this).inflate(R.layout.ID, null);
另一種方法:
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view=inflater.inflate(R.layout.ID, null);
上面2種方法本質上是一樣的,看下面的源碼,form()調用的就是getSystemService():
9 Java 代碼
10 public static LayoutInflater from(Context context) {
11 LayoutInflater LayoutInflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
13 if (LayoutInflater == null) {
14 throw new AssertionError("LayoutInflater not found.");
15 }
16 return LayoutInflater;
17 }
另外getSystemService()是Android 很重要的一個API,它是Activity 的一個方法,根據傳入的NAME 來取得對應的Object,然後轉換成相應的服務物件。以下介紹系統相應的服務。
傳入的Name 返回的對象 說明
WINDOW_SERVICE WindowManager 管理開啟的視窗程序
LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml 裡定義的view
ACTIVITY_SERVICE ActivityManager 管理應用程式的系統狀態
POWER_SERVICE PowerManger 電源的服務
ALARM_SERVICE AlarmManager 鬧鐘的服務
NOTIFICATION_SERVICE NotificationManager 狀態列的服務
KEYGUARD_SERVICE KeyguardManager 鍵盤鎖的服務
LOCATION_SERVICE LocationManager 位置的服務,如GPS
SEARCH_SERVICE SearchManager 搜尋的服務
VEBRATOR_SERVICE Vebrator 手機震動的服務
CONNECTIVITY_SERVICE Connectivity 網路連接的服務
WIFI_SERVICE WifiManager Wi-Fi 服務
TELEPHONY_SERVICE TeleponyManager 電話語音
18 Java 代碼
19 //基本用法
20 public void showCustomDialog(){
21 AlertDialog.Builder builder;
22 AlertDialog alertDialog;
23 Context mContext = AppActivity.this;
24 //下面倆種方法都可以
25 //LayoutInflater inflater = getLayoutInflater();
26 LayoutInflater inflater = (LayoutInflater)
27 mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
28 View layout = inflater.inflate(R.layout.custom_dialog,null);
29 TextView text = (TextView) layout.findViewById(R.id.text);
30 text.setText("Hello, Welcome to Mr Wei's blog!");
31 ImageView image = (ImageView) layout.findViewById(R.id.image);
32 image.setImageResource(R.drawable.icon);
33 builder = new AlertDialog.Builder(mContext);
34 builder.setView(layout);
35 alertDialog = builder.create();
36 alertDialog.show();
37 }
38 }
39
40 protected void showToast(int type) {
41 Toast.makeText(this, "*********", Toast.LENGTH_LONG).show();
42
43 LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOU
T_INFLATER_SERVICE);
44 View view = li.inflate(R.layout.toast, null);
45
46 Toast toast = new Toast(this);
47 toast.setView(view);
48 toast.setDuration(type);
49 toast.show();
50 }