Tears_fg

导航

布局加载的方法以及参数说明

布局加载的方式:

listview中适配器getView方法里获取获取布局控件的方法:

//第一种--获得布局加载器
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.listview_item_city, null);


//第二种
LayoutInflater layoutInflater2 = LayoutInflater.from(MainActivity.this);
View view = layoutInflater2.inflate(R.layout.listview_item_city, null);


//第三种
LayoutInflater layoutInflater = MainActivity.this.getLayoutInflater();
View view = layoutInflater.inflate(R.layout.listview_item_city, null);


//第四种
View view = View.inflate(MainActivity.this, R.layout.listview_item_city, null);

第四种与第二种基本相同,第四种方式的内部使用的是第二种

View.inflate(MainActivity.this, R.layout.listview_item_city, null) = LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item_city, null)

而第二种与第一种基本相同

LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item_city, null) = 

(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate(R.layout.listview_item_city, null)

 

LayoutInflater的使用:

   LayoutInflater的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如  Button、TextView等)。

 具体作用:

 1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;

2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素

参数说明:
  LayoutInflater.from(MainActivity.this).inflate(int Resource, ViewGroup parent,boolean attachToRoot);

参数一:资源id  参数二:加载view布局的父布局(例如,listview)  参数三:是否添加到父布局

 

parent为null: attachToRoot不管设置为什么值,都是没有用的,同时这个布局的最外层参数就没有效了

parent不为null:

  attachToRoot为false,表示不加载父布局,返回的是当前view视图的布局

  attachToRoot为true,表示加载父布局,返回的是包含所有view视图的父布局 

  其实View必须存在于一个父布局中,这样layout_width和layout_height才会有效,因为这两个参数是相对于父布局中的宽高

所以:inflate(int resource, ViewGroup root, boolean attachToRoot)的第二个参数不为空,resource的最外层布局参数才会有效,否则就无效了

 

 

posted on 2016-09-28 13:44  Tears_fg  阅读(310)  评论(0编辑  收藏  举报