Android ListView 添加 HeaderView后,HeaderView的布局不起作用
来源:互联网 发布:java软件培训认证 编辑:程序博客网 时间:2024/06/05 14:53
最近在使用ListView,发现一个奇怪的问题:当添加一个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>
mImageView = (ImageView)LayoutInflater.from(mContext).inflate(R.layout.list_view_header_layout, null);mListView.addHeaderView(mImageView);
显示效果图如下:
首先排除:addHeaderView()必须在setAdapter()之前调用,这一点我还是有注意的。
经过长时间的折腾终于找到了具体原因:
(1)下面的调用方式会使XML布局中ImageView的LayoutParam丢失
mImageView = (ImageView)LayoutInflater.from(mContext).inflate(R.layout.list_view_header_layout, null);mListView.addHeaderView(mImageView);修改为如下方式调用,则不会丢失LayoutParam
mImageView = (ImageView)LayoutInflater.from(mContext).inflate(R.layout.list_view_header_layout, mListView, false);mListView.addHeaderView(mImageView);(2)XML布局添加adjustViewBounds
<?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:adjustViewBounds="true" android:scaleType="fitCenter" android:src="@drawable/ruanjianguanli_banner" ></ImageView>按上面的方式修改后,显示正常,效果图如下:
在此介绍一下 LayoutInflater的inflate()函数的用法:
View view = inflate(int resource, ViewGroup root, boolean attachToRoot) resource:布局文件ID root:父ViewGroup对象, attachToRoot:是否将“渲染”出来的View添加到上面的root中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的话,传递何种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之外,内容都一致。
0 0
- Android ListView 添加 HeaderView后,HeaderView的布局不起作用
- ListView添加HeaderView后,HeaderView里的控件设置某些属性不起作用
- Android ListView添加 HeaderView,HeaderView中布局不起效果
- Android ListView添加了HeaderView后,出现点击HeaderView区域跳转的问题
- [Android]LIstView的HeaderView
- Android里 listview 添加 HeaderView
- listView在添加了headerView后的点击事件解析
- listview添加完headerView后position纠正
- 给ListView添加HeaderView
- 关于ListView的HeaderView
- ListView的HeaderView
- LIstView的HeaderView, FooterView
- Listview的HeaderView
- ListView的HeaderView
- ListView的HeaderView
- ListView的HeaderView
- ListView的HeaderView
- 5.3 ListView的HeaderView
- 百度搜索结果中link?url 格式的真实地址获取方式
- AutoCAD图形在紫金桥软件中的显示
- Java泛型中的通配符
- 基于PCL(Point Cloud Library)进行点云压缩
- Ubuntu14.04安装OpenCV3.0
- Android ListView 添加 HeaderView后,HeaderView的布局不起作用
- Python批量修改文件夹里文件的名称
- ASP中调用存储过程、语法、写法-sql server数据库,return,output
- Android MAT Memory Analyzer Tool安装配置解说
- 2015.11.17早6:50 黄河岸边,风景独好
- 如何把文件上传到另外一台服务器
- 安卓开发环境的配置
- eclipse的svn连接不上 request failed
- Java操作hbase CURD