The NoteBook of EricKong

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks
          在實(shí)際開發(fā)中LayoutInflater這個(gè)類還是非常有用的,它的作用類似于findViewById()。不同點(diǎn)是LayoutInflater是用來找res/layout/下的xml布局文件,并且實(shí)例化;而findViewById()是找xml布局文件下的具體widget控件(如Button、TextView等)。
          具體作用:
          1、對(duì)于一個(gè)沒有被載入或者想要?jiǎng)討B(tài)載入的界面,都需要使用LayoutInflater.inflate()來載入;
          2、對(duì)于一個(gè)已經(jīng)載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。
          LayoutInflater 是一個(gè)抽象類,在文檔中如下聲明:
          public abstract class LayoutInflater extends Object
          獲得 LayoutInflater 實(shí)例的三種方式
          1. LayoutInflater inflater = getLayoutInflater();//調(diào)用Activity的getLayoutInflater() 
          2. LayoutInflater inflater = LayoutInflater.from(context);  
          3. LayoutInflater inflater =  (LayoutInflater)context.getSystemService
                                        (Context.LAYOUT_INFLATER_SERVICE);
          其實(shí),這三種方式本質(zhì)是相同的,從源碼中可以看出:
          getLayoutInflater():
          Activity 的 getLayoutInflater() 方法是調(diào)用 PhoneWindow 的getLayoutInflater()方法,看一下該源代碼:
          public PhoneWindow(Context context)
          {   
           super(context);   
              mLayoutInflater = LayoutInflater.from(context);
          }
          可以看出它其實(shí)是調(diào)用 LayoutInflater.from(context)。
          LayoutInflater.from(context):
          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;
          }
          可以看出它其實(shí)調(diào)用 context.getSystemService()。
          結(jié)論:所以這三種方式最終本質(zhì)是都是調(diào)用的Context.getSystemService()。
          另外getSystemService()是Android很重要的一個(gè)API,它是Activity的一個(gè)方法,根據(jù)傳入的NAME來取得對(duì)應(yīng)的Object,然后轉(zhuǎn)換成相應(yīng)的服務(wù)對(duì)象。以下介紹系統(tǒng)相應(yīng)的服務(wù)。
           
          傳入的Name  返回的對(duì)象 說明
          WINDOW_SERVICE WindowManager 管理打開的窗口程序
          LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定義的view
          ACTIVITY_SERVICE ActivityManager 管理應(yīng)用程序的系統(tǒng)狀態(tài)
          POWER_SERVICE PowerManger 電源的服務(wù)
          ALARM_SERVICE AlarmManager 鬧鐘的服務(wù)
          NOTIFICATION_SERVICE NotificationManager 狀態(tài)欄的服務(wù)
          KEYGUARD_SERVICE KeyguardManager 鍵盤鎖的服務(wù)
          LOCATION_SERVICE LocationManager 位置的服務(wù),如GPS
          SEARCH_SERVICE SearchManager 搜索的服務(wù)
          VEBRATOR_SERVICE Vebrator 手機(jī)震動(dòng)的服務(wù)
          CONNECTIVITY_SERVICE Connectivity 網(wǎng)絡(luò)連接的服務(wù)
          WIFI_SERVICE WifiManager Wi-Fi服務(wù)
          TELEPHONY_SERVICE TeleponyManager 電話服務(wù)
          inflate 方法
          通過 sdk 的 api 文檔,可以知道該方法有以下幾種過載形式,返回值均是 View 對(duì)象,如下:
          public View inflate (int resource, ViewGroup root) 
          public View inflate (XmlPullParser parser, ViewGroup root)
          public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)  
          public View inflate (int resource, ViewGroup root, boolean attachToRoot)
          示意代碼:
          LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);       
          View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test));       
          //EditText editText = (EditText)findViewById(R.id.content);// error 
          EditText editText = (EditText)view.findViewById(R.id.content);
          對(duì)于上面代碼,指定了第二個(gè)參數(shù) ViewGroup root,當(dāng)然你也可以設(shè)置為 null 值。
          注意:
          ·inflate 方法與 findViewById 方法不同;
          ·inflater 是用來找 res/layout 下的 xml 布局文件,并且實(shí)例化;
          ·findViewById() 是找具體 xml 布局文件中的具體 widget 控件(如:Button、TextView 等)。
          posted on 2014-12-17 10:23 Eric_jiang 閱讀(199) 評(píng)論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 镇江市| 城步| 星座| 承德县| 英吉沙县| 神池县| 长阳| 徐汇区| 会东县| 平乡县| 肥乡县| 湖南省| 呼图壁县| 绥阳县| 漳平市| 商丘市| 焦作市| 祁东县| 年辖:市辖区| 河曲县| 孙吴县| 文化| 二连浩特市| 江永县| 江西省| 徐州市| 镇雄县| 哈密市| 关岭| 高青县| 铁岭市| 巴中市| 辰溪县| 峨边| 麻城市| 荔波县| 平安县| 吉安市| 阿坝县| 巴塘县| 马边|