自定义控件动态加载textview轻松实现换行

 

自定义父类控件

public class CheyouquanLinearLayout extends ViewGroup {
  int mLeft, mRight, mTop, mBottom;
     @SuppressWarnings("rawtypes")
  Hashtable map = new Hashtable();
     public CheyouquanLinearLayout(Context context) {
         super(context);
     }

     public CheyouquanLinearLayout(Context context, int horizontalSpacing, int verticalSpacing) {
         super(context);
     }

     public CheyouquanLinearLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
     }

     @SuppressLint("DrawAllocation")
  @SuppressWarnings("unchecked")
  @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         int mWidth = MeasureSpec.getSize(widthMeasureSpec);
         int mCount = getChildCount();
         int mX = 0;
         int mY = 0;
         mLeft = 0;
         mRight = 0;
         mTop = 0;
         mBottom = 0;
         int j = 0;
         @SuppressWarnings("unused")
   View lastview = null;
         for (int i = 0; i < mCount; i++) {
             final TextView child = (TextView) getChildAt(i);
             String ss=child.getText().toString();
           
             child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
             // 此处增加onlayout中的换行判断,用于计算所需的高度
             int childw = child.getMeasuredWidth();
             int childh = child.getMeasuredHeight();
             mX += childw;  //将每次子控件宽度进行统计叠加,如果大于设定的高度则需要换行,高度即Top坐标也需重新设置


             Position position = new Position();
             mLeft = getPosition(i - j, i);
             mRight = mLeft + childw;
             if (mX >= mWidth) {
                 mX = childw;
                 mY += childh;
                 j = i;
                 mLeft = 0;
                 mRight = mLeft + child.getMeasuredWidth();
     mTop = mY;
     //PS:如果发现高度还是有问题就得自己再细调了
             }
             mBottom = mTop + child.getMeasuredHeight();
             mY = mTop;  //每次的高度必须记录 否则控件会叠加到一起
             position.left = mLeft;
             position.top = mTop;
             position.right = mRight;
             position.bottom = mBottom;
             map.put(child, position);
         }
         setMeasuredDimension(mWidth, mBottom);
     }


     @Override
     protected LayoutParams generateDefaultLayoutParams() {
         return new LayoutParams(1, 1); // default of 1px spacing
     }


     @Override
     prote

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值