您的位置:首页 > 移动开发 > Android开发

组件篇 一 、Android ListView 子单位大小

2016-09-07 12:26 232 查看
在使用 android 的ListView 控件时遇到了困难

已解决 希望得到解决方案的直接跳至 第3页

<困难描述 : ListView中每一项item 高度不相等 />

<实际描述 :

1. 我使用的ListView 的子 item 布局为 LinearLayout

设置布局为水平线性 android:orientation=”horizontal”

充满父布局 android:layout_width=”fill_parent”

充满父布局 android:layout_height=”fill_parent”

设置了最小高度为100dp android:minHeight=”100dp”

(这里说明dp等同于dip,它是一个长度单位,1dp=1/160英寸 后面布局大小单位默认为dp)

2.内含一ImageView 控件 有关问题属性为

android:layout_height=”fill_parent”

android:scaleType=”fitXY”

3.内含TextView 控件 有关问题属性为

android:layout_height=”fill_parent”

4.寻找不到其他影响控件大小的因素/>

<寻找问题原因

1. 查找出 各个控件 创建后的大小

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第1组控件图片高度为﹕ 120

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第1组控件文本高度为﹕ 120

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第2组控件图片高度为﹕ 106

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第2组控件文本高度为﹕ 106

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第3组控件图片高度为﹕ 115

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第3组控件文本高度为﹕ 115

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第4组控件图片高度为﹕ 131

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第4组控件文本高度为﹕ 131

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第5组控件图片高度为﹕ 111

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第5组控件文本高度为﹕ 111

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第6组控件图片高度为﹕ 100

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第6组控件文本高度为﹕ 100

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第7组控件图片高度为﹕ 100

06-30 21:13:24.779 29594-29594/pers.li.six D/这是第7组控件文本高度为﹕ 100

打印出此数据的函数 位于 附录1 第四页

发现 : 每个控件 的高度的确是不同的 但是 每个item的控件高度是相同的/>

<子问题 (在前面布局设置的前提下,以后不再提示)

为什么每组控件高度是相同的

发现 :每组控件的高度是由布局里最高的 组件高举决定 />

<假设1: TextView 控件 的高度影响 了每个子item的高度

发现: 每个 TextView控件输出都是一行

结论:排除 TextView 控件是产生问题的原因

结论:本假设 以后可能成为 以后遇到类似问题的原因 />

<(未来遇到后)解决方案 :android:maxLines=”2” //文字最多显示两行

也可以限制字数 等其他方法 />

<假设2: ImageView 控件 的高度影响 了每个子item 的高度

发现: 图片大小 影响了每个子item的高度

结论:ImageView 控件 的高度影响 了每个子item 的高度 />

<解决方案:

ImageView 控件 有关问题属性添加 android:adjustViewBounds=”true”

android:scaleType=”fitXY”是前提 若没有则不能使用前一个功能

用于 控制最大 高度 因为我在LinearLayout 中控制了最小高度

相关获取 控件的地方可以设置

imageView.setMaxWidth(100); 我这里设置了100dp

(这里说明dp等同于dip,它是一个长度单位,1dp=1/160英寸 跟像素没太大关系跟屏幕分辨率有关系 后面布局大小单位默认为dp)

输出显示:

06-30 21:35:09.439 4967-4967/pers.li.six D/这是第1组控件图片高度为﹕ 100

06-30 21:35:09.443 4967-4967/pers.li.six D/这是第1组控件文本高度为﹕ 100

06-30 21:35:09.447 4967-4967/pers.li.six D/这是第2组控件图片高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第2组控件文本高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第3组控件图片高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第3组控件文本高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第4组控件图片高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第4组控件文本高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第5组控件图片高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第5组控件文本高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第6组控件图片高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第6组控件文本高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第7组控件图片高度为﹕ 100

06-30 21:35:09.471 4967-4967/pers.li.six D/这是第7组控件文本高度为﹕ 100

解决成功/>

附录1 输出控件 高度 和 宽度的函数

这里 position 为string类型 内容 例 :第1组

ViewTreeObserver vto = imageView.getViewTreeObserver();

vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {

Log.d(positions+"图片高度为","   "+imageView.getHeight());


// Log.d(positions+”图片宽度为”,” “+imageView.getWidth());

}
});

ViewTreeObserver textv = textView.getViewTreeObserver();
textv.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {

Log.d(positions+"文本高度为","   "+textView.getHeight());


// Log.d(positions+”文本宽度为”,” “+textView.getWidth());

}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息