android中LayoutInflater類的使用

來源:互聯網
上載者:User

Inflater英文意思是膨脹,在Android中應該是擴充的意思吧。 

LayoutInflater的作用類似於 findViewById(),不同點是LayoutInflater是用來找layout檔案夾下的xml布局檔案,並且執行個體化!而 findViewById()是找具體某一個xml下的具體 widget控制項(如:Button,TextView,ListView等)。

她可以有很多地方可以使用,如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);

其實方法一和方法二本質是一樣的,from調用的就是getSystemService();方法,見LayoutInflater類from()方法的原始碼,如下:

     /**
     * Obtains the LayoutInflater from the given 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;
    }

另外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 電話語音

//基本用法

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.