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

在使用 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());

        }
    });
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值