android 中LayoutInflater 的使用

來源:互聯網
上載者:User

   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 }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.