EditText自适应高度

本文介绍了一种根据文本内容自动调整EditText高度的方法,适用于表格或表单界面,通过监听控件绘制事件并计算文本长度和所需的行数来实现高度的自适应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EditText自适应高度

在开发中做到一个表单页面,由很多EditText构成的,为了使页面尽量美观整齐,每个EditText都设置为固定高度,可是当过多的文字内容加载进来时,就会导致部分文字由于控件高度的原因显示不出来,如下图 标题行展示演示图片

由于数据时从数据库中加载,所以文字长度是不固定的,所以我们就可以根据文字长度来自动计算控件的高度,代码如下,其他控件也可依次类推


/**
      * 根据文字内容计算重绘EditText的高度
      *
      * @param linearLayout
      *            父控件
      * @param editText
      *            文本控件
      * @param contents
      *            文字内容
      */
      private void caculateHeight ( final LinearLayout linearLayout ,
                 final EditText editText , final String contents) {
            // 监听控件绘制
            ViewTreeObserver vto = editText .getViewTreeObserver();
            vto.addOnPreDrawListener( new ViewTreeObserver .OnPreDrawListener() {
                 @Override
                 public boolean onPreDraw() {
                      Boolean hasMessured = (Boolean ) editText .getTag();
                      if ( hasMessured == false ) {
                            editText.setTag( true );
                            int width = editText.getWidth(); // 控件宽度
                            int height = editText.getHeight(); // 控件高度
                            if ( width != 0 && height != 0) {
                                 if (!TextUtils .isEmpty (contents )) {
                                      // 显示文字个数字数
                                      int len = contents .length();
                                      // 得到字体像素
                                      float px = editText .getTextSize();
                                      Log. i( "time" , "字体像素:" + px + ",控件宽度:" + width );
                                      double length = Math .floor (width / px ); // 能容纳字母个数
                                      if ( len > length) {
                                            int llWidth = linearLayout .getLayoutParams().width ;
                                            int offset = ( int) (len / length ); // 计算出需要行数
                                            linearLayout
                                                     .setLayoutParams( new LinearLayout .LayoutParams(
                                                                 llWidth, ( int) ( height + px
                                                                           * offset)));
                                     }

                                }
                           }
                     }
                      return true ;
                }
           });
     }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值