Android LayoutInflater

作用:

類似於findViewById()

不同點是LayoutInflater是用來找res/layout/下的xml佈局文件,並且實例化;

而findViewById()是找xml佈局文件下的具體widget控件(如Button、TextView等)

具體作用:
1、對於一個沒有被載入或者想要動態載入的界面,都需要使用LayoutInflater.inflate()來載入;
2、對於一個已經載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。

使用:

LayoutInflater 是一個抽象類,在文檔中如下聲明:
public abstract class LayoutInflater extends Object
獲得 LayoutInflater 實例的三種方式
1. LayoutInflater inflater = getLayoutInflater();//調用Activity的getLayoutInflater()
2. LayoutInflater inflater = LayoutInflater.from(context);
3. LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

inflate 方法
通過 sdk 的 api 文檔,可以知道該方法有以下幾種過載形式,返回值均是 View 對象,如下:
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);
對於上面代碼,指定瞭第二個參數 ViewGroup root,當然你也可以設置為 null 值。

針對getSystemService()參數的種類:

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 電話服務

Code Demo:

Context mContext = MainActivity.this;

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 image = (ImageView) layout.findViewById(R.id.image);

image.setImageResource(R.drawable.icon);

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。