You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio为TextInputLayout添加hint出现渲染问题如何解决

TextInputLayout设置hint后布局预览渲染报错

问题现象

在Android Studio中为TextInputLayout添加hint属性时,布局预览出现渲染报错,移除该属性后预览恢复正常。

  • 报错预览效果:错误截图
  • 移除hint后的正常预览效果:正常效果截图

错误堆栈

java.lang.IllegalArgumentException: width and height must be > 0
at android.graphics.Bitmap.createBitmap(Bitmap.java:1113)
at android.graphics.Bitmap.createBitmap(Bitmap.java:1080)
at android.graphics.Bitmap.createBitmap(Bitmap.java:1030)
at android.graphics.Bitmap.createBitmap(Bitmap.java:991)
at com.google.android.material.textfield.CutoutDrawable.drawStrokeShape(CutoutDrawable.java:100)
at com.google.android.material.shape.MaterialShapeDrawable.draw(MaterialShapeDrawable.java:974)
at com.google.android.material.textfield.CutoutDrawable.draw(CutoutDrawable.java:89)
at android.graphics.drawable.LayerDrawable.draw(LayerDrawable.java:1018)
at android.view.View.drawBackground(View.java:22581)
at android.view.View.draw_Original(View.java:22342)
at android.view.View_Delegate.draw(View_Delegate.java:56)
at android.view.View.draw(View.java:22323)
at android.view.View.draw_Original(View.java:22223)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at android.view.View.draw_Original(View.java:22221)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at android.view.View.draw_Original(View.java:22353)
at android.view.View_Delegate.draw(View_Delegate.java:56)
at android.view.View.draw(View.java:22323)
at com.google.android.material.textfield.TextInputLayout.draw(TextInputLayout.java:4078)
at android.view.View.draw_Original(View.java:22223)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1994)
at android.view.View.draw_Original(View.java:22221)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at android.view.View.draw_Original(View.java:22353)
at android.view.View_Delegate.draw(View_Delegate.java:56)
at android.view.View.draw(View.java:22323)
at android.widget.ScrollView.draw(ScrollView.java:1833)
at android.view.View.draw_Original(View.java:22223)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1994)
at android.view.View.draw_Original(View.java:22221)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at android.view.View.draw_Original(View.java:22221)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at android.view.View.draw_Original(View.java:22221)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:21995)
at android.view.ViewGroup.drawChild(ViewGroup.java:4516)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)
at android.view.View.draw_Original(View.java:22353)
at android.view.View_Delegate.draw(View_Delegate.java:56)
at android.view.View.draw(View.java:22323)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:553)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:450)
at com.android.layoutlib.bridge.BridgeRenderSession.render(BridgeRenderSession.java:120)
at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:137)
at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:119)
at com.android.tools.idea.rendering.RenderTask.lambda$null$12(RenderTask.java:992)
at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$2.run(RenderExecutor.kt:174)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)

复现用布局代码

<com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textInputLayout2"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:hint="@string/convert_from"
            app:boxCornerRadiusBottomEnd="100dp"
            app:boxCornerRadiusBottomStart="100dp"
            app:boxCornerRadiusTopEnd="100dp"
            app:boxCornerRadiusTopStart="100dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView">

            <AutoCompleteTextView
                android:id="@+id/convertFromAutoCompleteTextView"
                android:layout_width="250dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:fontFamily="@font/poppins_medium"
                android:inputType="none"
                android:text="@string/kilogram_kg" />

        </com.google.android.material.textfield.TextInputLayout>

已尝试无效的方案

  • 重新构建项目
  • 重启Android Studio
  • 执行Invalidate Caches/Restart清除缓存并重启
  • 按照Android Studio提示刷新布局

问题原因

该问题是Material组件库旧版本的IDE布局预览专属bug,触发条件为:使用OutlinedBox系列TextInputLayout样式、同时设置了超大圆角(示例中四个角均设为100dp的完全圆角)+ 配置hint属性。渲染时CutoutDrawable计算hint文字的边框缺口尺寸时拿到了0值,触发Bitmap创建时宽高必须大于0的校验异常。该异常仅出现在IDE预览阶段,不会影响真机/模拟器的实际运行效果。

解决方案

  • 升级Material依赖:将模块build.gradle中引入的com.google.android.material:material依赖升级到1.7.0及以上稳定版本,新版本已修复该大圆角+hint触发的预览渲染问题。
  • 固定输入框高度:如果暂时不想升级依赖,可以给TextInputLayout设置固定高度(比如Material Design规范推荐的56dp),避免渲染时尺寸计算拿到0值。
  • 临时预览规避:开发阶段可以临时把圆角值调小(比如20dp)完成布局调整,正式打包前改回目标圆角值即可,真机运行不会触发该报错。

内容的提问来源于stack exchange,提问作者Belal Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 19:24:24