1.addHeaderView异常:

不久前在做通讯录开发时拔取ListView,发现五个意想不到的难题:当添加3个ImageView
作为HeaderView时,发现ImageView长宽始终是1:1的深浅,即调用 ListView.addHeaderView(mImageView) 之后mImageView尺寸布局被忽略。具体代码如下:

list_view_header_layout.xml

<?xml version="1.0" encoding="utf-8"?>  
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    android:scaleType="fitCenter"  
    android:src="@drawable/ruanjianguanli_banner" >  
</ImageView>  

java

mImageView = (ImageView)LayoutInflater.from(mContext).inflate(R.layout.list_view_header_layout, null);  
mListView.addHeaderView(mImageView); 

地点的调用格局会使XML布局中ImageView的LayoutParam丢失,调用 ListView.addHeaderView(mImageView) 之后mImageView尺寸布局被忽略

修改为如下情势调用,则不会丢失LayoutParam

mImageView = (ImageView)LayoutInflater.from(mContext).inflate(R.layout.list_view_header_layout, mListView, false);  
mListView.addHeaderView(mImageView);  

 

2.LayoutInflater的inflate()函数的用法:

View view = inflate(int resource, ViewGroup root, boolean attachToRoot)   
resource:布局文件ID   
root:父ViewGroup对象,   
attachToRoot:是否将“渲染”出来的View添加到上面的root中   

XML,root和attachToRoot是一同成效的: 
1,有root,同时attachToRoot为false,那么inflate()重返的就是“翻译”拿到的view 
2,有root,同时attachToRoot为true,那么inflate()就是将“翻译”拿到的view添加到root后,然后回来root 
3,无root,同时attachToRoot为false,那么inflate()再次回到的就是“翻译”得到的view
4,无root,同时attachToRoot为true,报错

root还有多少个要害的功效就是为“渲染”拿到的view添加方便的LayoutParam,并且只要并不想将得到的View添加到root的话

1. View view = mLayoutInflater.inflate(R.layout.header, new ListView(mContext), false);  
2. View view = mLayoutInflater.inflate(R.layout.header, new LinearLayout(mContext), false);  
3. View view = mLayoutInflater.inflate(R.layout.header, new RelativeLayout(mContext), false);  

地点得到的View,除了view的LayoutParam分别为AbsListView.LayoutParams,LinearLayout.LayoutParams,RelativeLayout.LayoutParams之外,内容都一律。  

  

 

  

相关文章

网站地图xml地图