Inflater英文意思是膨脹,在Android中應該是擴展的意思吧。
LayoutInflater的作用類似於 findViewById(),不同點是LayoutInflater是用來找layout文件夾下的xml佈局文件,並且實例化!而 findViewById()是找具體某一個xml下的具體 widget控件(如:Button,TextView等)。
(0)她可以有很多地方可以使用,如BaseAdapter的getView中,自定義Dialog中取得view中的組件widget等等。
它的用法有2種:
Java代碼
- view plaincopy to clipboardprint?
- LayoutInflater inflater = LayoutInflater.from(this);
- View view=inflater.inflate(R.layout.ID, null);
- 或者乾脆併成一句:
- View view=LayoutInflater.from(this).inflate(R.layout.ID, null);
另一種方法:
Java代碼
- view plaincopy to clipboardprint?
- LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
- View view=inflater.inflate(R.layout.ID, null);
上面2種方法本質上是一樣的,看下面的源碼,form()調用的就是getSystemService():
Java代碼
- Java代碼
- public static LayoutInflater from(Context context) {
- LayoutInflater LayoutInflater =
- (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- if (LayoutInflater == null) {
- throw new AssertionError("LayoutInflater not found.");
- }
- return LayoutInflater;
- }
另外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 | 電話服務 |
Java代碼
- Java代碼
- //基本用法
- public void showCustomDialog(){
- AlertDialog.Builder builder;
- AlertDialog alertDialog;
- Context mContext = AppActivity.this;
- //下面倆種方法都可以
- //LayoutInflater inflater = getLayoutInflater();
- LayoutInflater inflater = (LayoutInflater)
- mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
- View layout = inflater.inflate(R.layout.custom_dialog,null);
- TextView text = (TextView) layout.findViewById(R.id.text);
- text.setText("Hello, Welcome to Mr Wei's blog!");
- ImageView p_w_picpath = (ImageView) layout.findViewById(R.id.p_w_picpath);
- p_w_picpath.setImageResource(R.drawable.icon);
- builder = new AlertDialog.Builder(mContext);
- builder.setView(layout);
- alertDialog = builder.create();
- alertDialog.show();
- }
- }
- protected void showToast(int type) {
- Toast.makeText(this, "*********", Toast.LENGTH_LONG).show();
- LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View view = li.inflate(R.layout.toast, null);
- Toast toast = new Toast(this);
- toast.setView(view);
- toast.setDuration(type);
- toast.show();
- }