java.lang.IllegalArgumentException: android 中的宽度和高度必须 > 0

2024-03-30

我正在尝试从MultiAutoCompleteTextView来自用户并以类似气泡的格式显示它们,但我得到了 :在android中宽度和高度必须> 0

    final MultiAutoCompleteTextView tags = (MultiAutoCompleteTextView) findViewById(R.id.multiAutoCompleteTextView1);
    String[] TAGS = getResources().getStringArray(R.array.countries);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, TAGS);
    tags.setAdapter(adapter);
    tags.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
    tags.setThreshold(1);
    String contactName = tags.getText().toString();
    final SpannableStringBuilder sb = new SpannableStringBuilder();
    TextView tv = createContactTextView(contactName);
    BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
    bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());

    sb.append(contactName + ",");
    sb.setSpan(new ImageSpan(bd), sb.length() - (contactName.length() + 1), sb.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    Toast.makeText(getApplicationContext(),sb,Toast.LENGTH_SHORT).show();

}

    public TextView createContactTextView(String text){
        //creating textview dynamically
        TextView tv = new TextView(this);
        tv.setText(text);
        tv.setTextSize(20);
        tv.setBackgroundResource(R.drawable.oval);
        tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_clear_search_api_holo_light, 0);
        return tv;
    }

    public static Object convertViewToDrawable(View view) {
        int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        view.measure(spec, spec);
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        c.translate(-view.getScrollX(), -view.getScrollY());
        view.draw(c);
        view.setDrawingCacheEnabled(true);
        Bitmap cacheBmp = view.getDrawingCache();
        Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
        view.destroyDrawingCache();
        return new BitmapDrawable(viewBmp);

    }

当我尝试运行这个时,我收到此错误 宽度和高度必须大于 0。

  E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.androidbegin.train, PID: 11263
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidbegin.train/com.androidbegin.loginregister.WorkNow}: java.lang.IllegalArgumentException: width and height must be > 0
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
                                                Caused by: java.lang.IllegalArgumentException: width and height must be > 0
                                                   at android.graphics.Bitmap.createBitmap(Bitmap.java:836)
                                                   at android.graphics.Bitmap.createBitmap(Bitmap.java:815)
                                                   at android.graphics.Bitmap.createBitmap(Bitmap.java:782)
                                                   at com.androidbegin.loginregister.WorkNow.convertViewToDrawable(WorkNow.java:57)
                                                   at com.androidbegin.loginregister.WorkNow.onCreate(WorkNow.java:34)
                                                   at android.app.Activity.performCreate(Activity.java:6010)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 

我认为主要问题是spec正在设置为0

int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

然后,在这里,视图将有0作为宽度和高度...

view.measure(spec, spec);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

因此,在创建位图时,Exception会发生因为view.getMeasuredWidth() and view.getMeasuredHeight()都是0他们不可能

Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

如果可能的话,尝试更改为:

int spec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.UNSPECIFIED);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.IllegalArgumentException: android 中的宽度和高度必须 > 0 的相关文章

随机推荐

  • 如何使用 WebApplicationFactory 覆盖 Autofac 容器中的服务

    我正在使用 WebApplicationFactory 编写一些集成测试 我使用 Autofac 作为我的依赖解析器 在我的测试中 我试图覆盖其中一项注册 以便我可以模拟其中一项依赖项 使用aspnetcore默认的ConfigureSer
  • 如何将html5画布保存到服务器

    我将一些图像加载到我的画布上 然后在加载后我想单击一个按钮将该画布图像保存到我的服务器上 我可以看到脚本工作正常 直到它到达 toDataURL 部分并且我的函数停止执行 我究竟做错了什么 这是我的代码
  • Android View 背景意外变化

    我正在构建一个具有大量屏幕的应用程序 大多数屏幕的顶部都有一个带有背景颜色的视图 我经常使用 view setBackgroundColor color 更改颜色 奇怪的事情来了 有时在设置一个视图的颜色后 例如 f14fb7 在应用程序中
  • 将阿拉伯数字转换为英语

    我正在寻找一种将阿拉伯数字字符串 转换为英语的方法 数字字符串 0123456789 Private Sub Button1 Click ByVal sender As System Object ByVal e As System Eve
  • 如何将多个局部变量传递给嵌套部分

    这应该是非常简单且有据可查的 我已经这样做了好几次了 尽管有些事情仍然让我很烦恼 我有一个调用嵌套部分的部分结构 在某个时刻一render调用需要将额外的变量传递给部分 尽管部分的渲染失败并显示 undefined local variab
  • Swing 菜单 Java 7 mac osx

    我一直在 mac os x 上测试我的 Swing 应用程序 它在小程序上运行 当我在浏览器中运行此小程序时 我注意到 JMenus JMenuItems 上的鼠标悬停无法正常工作 这是一个重现该问题的小程序 package com mac
  • 如何在 Sublime Text 中使用控制台

    我正在使用 Sublime Text 2 来编写程序 并希望在其中运行控制台来编译和运行它们 有没有办法在 Sublime Text 2 中嵌入控制台命令行 已经在那里了吗 我同时使用 Windows 和 Linux 我想你可以尝试创建一个
  • 推送事件不会触发推送路径上的工作流程

    我目前正在测试 GitHub Actions 工作流程这个存储库 https github com GuillaumeFalourd poc github actions 我正在尝试使用这个工作流程 https github com Gui
  • 禁止 (#403) - 你不能执行此操作 [Yii2]

    我尝试添加菜单map在后端 我用yii2 advanced 这是我的 控制器 代码 public function actionMap return this gt render map 但是 当我尝试使用此网址访问它时http local
  • opencv中如何根据深度颜色分割连通区域

    I have a picture like which i need to segment the picture into 8 blocks 我尝试过这种阈值方法 img gray cv2 imread input file cv2 IM
  • 如何获得欧米茄(n)

    我有公式 a n n a n 1 1 a 0 0 如果没有主定理 我怎样才能从中得到 Omega Theta 或 O 表示法 或者有人有一个很好的网站来理解解释 马斯特定理甚至不适用 所以不能使用它并不是太大的限制 此处有效的方法是猜测上限
  • 在 R 中:计算精确率/召回率曲线下的面积 (AUPR)?

    假设我有两个矩阵 A代表标签矩阵 B代表A对应的预测概率矩阵 现在我想根据矩阵A和B计算AUPR 精确率 召回率曲线下的面积 对于常见的AUC Area Under Precision Recall Curve ROC Curve R中有很
  • 将多个预制件分配给一个只允许添加一个的脚本

    我有一个脚本 它使用 LeanTween 将对象 预制 放入预制路径上 效果很好 其工作原理是 您可以将一个对象分配给附加有 Moveable 脚本的 路径添加器 MoveController 但是 我需要能够将运行时创建的新预制件添加到
  • 使用 printf 在 c 中 fork() [重复]

    这个问题在这里已经有答案了 有 2 个不同的程序 它们都很小 例如 int main printf print hello fork int main printf print hello n fork 输出 1 是 print hello
  • 根据列删除配置单元中的重复行

    我有一个包含 10 列的 HIVE 表 其中前 9 列将有重复的行 而第 10 列则不会 因为 CREATE DATE 将具有创建日期 例子 如果我今天在表中插入 10 行 它将具有 CREATE DATE 作为今天的日期 如果我明天再次插
  • apache beam.io.BigQuerySource use_standard_sql 作为数据流运行程序运行时不起作用

    我有一个数据流作业 我将首先从 bigquery 查询中读取 在标准 sql 中 它在直接运行模式下完美运行 但是 我尝试在数据流运行程序模式下运行此数据流并遇到此错误 响应 content 显然 use standard sql 参数在数
  • 为什么react-router正确处理正则表达式“path”,但同时抛出错误?

    我有一个组件想要显示在除根路径之外的所有路径上 因此 不要提供所有路径Route组件 我这样写
  • Networkx PageRank - 不同权重的同等排名

    我有一个关于 PageRank 的问题 这可能表明我不太了解它 如果我有一个包含两个节点 A 和 B 的图 并且链接 A gt B 权重 1 0 和 B gt A 权重 2 0 那么 A 不应该因为其入度权重更高而排名更高吗 当我尝试来自n
  • Java中如何检测是否按下了某个键? [复制]

    这个问题在这里已经有答案了 我是 Java 的初学者 我一直在研究如何检测用户是否按下了某个键 例如箭头键 显然有很多方法可以做到这一点 我发现这个方法应该对我有用 public void keyPressed KeyEvent e int
  • java.lang.IllegalArgumentException: android 中的宽度和高度必须 > 0

    我正在尝试从MultiAutoCompleteTextView来自用户并以类似气泡的格式显示它们 但我得到了 在android中宽度和高度必须 gt 0 final MultiAutoCompleteTextView tags MultiA