zoukankan      html  css  js  c++  java
  • android中LayoutInflater的使用

          Inflater英文意思是膨胀,在android中应该是扩展的意思吧。
    LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。

       (0)她可以有很多地方可以使用,如BaseAdapter的getView中,自定义Dialog中取得view中的组件widget等等。
    它的用法有2种:

    Java代码
    1. LayoutInflater inflater = LayoutInflater.from(this);   
    2. View view=inflater.inflate(R.layout.ID, null);  
    3. 或者干脆并成一句:  
    4. View view=LayoutInflater.from(this).inflate(R.layout.ID, null);  
    LayoutInflater inflater = LayoutInflater.from(this); 
    View view=inflater.inflate(R.layout.ID, null);
    或者干脆并成一句:
    View view=LayoutInflater.from(this).inflate(R.layout.ID, null);


    另一种方法:
    Java代码
    1. LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);  
    2. View view=inflater.inflate(R.layout.ID, null);  
    LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
    View view=inflater.inflate(R.layout.ID, null);


    上面2种方法本质上是一样的,看下面的源码,form()调用的就是getSystemService():
    Java代码
    1. public static LayoutInflater from(Context context) {     
    2.     LayoutInflater LayoutInflater =     
    3.             (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);     
    4.     if (LayoutInflater == null) {     
    5.         throw new AssertionError("LayoutInflater not found.");     
    6.     }     
    7.     return LayoutInflater;     
    8. }   
    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代码
    1. //基本用法  
    2. public void showCustomDialog(){  
    3.   AlertDialog.Builder builder;  
    4.   AlertDialog alertDialog;  
    5.   Context mContext = AppActivity.this;  
    6. //下面俩种方法都可以  
    7.   //LayoutInflater inflater = getLayoutInflater();  
    8.   LayoutInflater inflater = (LayoutInflater)   
    9. mContext.getSystemService(LAYOUT_INFLATER_SERVICE);  
    10.   View layout = inflater.inflate(R.layout.custom_dialog,null);  
    11.   TextView text = (TextView) layout.findViewById(R.id.text);  
    12.   text.setText("Hello, Welcome to Mr Wei's blog!");  
    13.   ImageView image = (ImageView) layout.findViewById(R.id.image);  
    14.   image.setImageResource(R.drawable.icon);  
    15.   builder = new AlertDialog.Builder(mContext);  
    16.   builder.setView(layout);  
    17.   alertDialog = builder.create();  
    18.   alertDialog.show();  
    19.  }  
    20. }  
    21.   
    22. protected void showToast(int type) {    
    23.         Toast.makeText(this"*********", Toast.LENGTH_LONG).show();    
    24.     
    25.         LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
    26.         View view = li.inflate(R.layout.toast, null);    
    27.             
    28.         Toast toast = new Toast(this);    
    29.         toast.setView(view);    
    30.         toast.setDuration(type);    
    31.         toast.show();    
    32.     }    
    //基本用法
    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();  
        }  
    
  • 相关阅读:
    C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。
    opencv中的vs框架中的Blob Tracking Tests的中文注释。
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 棋盘多项式
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
    Java实现 蓝桥杯VIP 算法提高 分苹果
  • 原文地址:https://www.cnblogs.com/Greenwood/p/1969325.html
Copyright © 2011-2022 走看看