【问题标题】:Set 9patch background dynamically动态设置9patch背景
【发布时间】:2013-08-23 02:44:23
【问题描述】:

有没有人尝试过动态设置按钮的 9Patch 背景?如果重要,按钮的宽度和高度设置为wrap_content

如果是,您是如何解决“黑线”问题的?

谢谢

【问题讨论】:

  • 这里并没有真正明白你想问什么
  • 我需要在运行时更改 Button 的背景。背景是9Patch。当我这样做时,我发现 9Patch 无法正常工作
  • 检查你的9patch是否正确。你是用 draw9patch 做的吗?
  • 它以何种方式不“按应有的方式工作”?你能编辑你的问题并将你的补丁 9 放在那里吗?

标签: android button background nine-patch


【解决方案1】:

如果您看到您在 9-patch 图像上绘制的黑点,那是因为您没有预编译您的图像。

若要在运行时将 9-patch 图像设置为背景,则必须在移除边框并将其编码为 PNG 块时预先编译它们。

您可以通过在应用程序的res/drawable 文件夹中插入 .9.png 图像、编译它并生成 .apk 来实现(在 Eclipse 上,右键单击您的 project root > Android Tools > Export Unsigned Application Package)。然后解压缩 .apk 文件,您将获得 .9.png 图像,其中包含 9-patch 编译数据。

使用您预编译的 9-patch 图像,执行类似的操作来加载您的图像:

private Drawable loadNinePatch(String path, Context context) {
        Bitmap bitmap = BitmapFactory.decodeFile(path);
        byte[] chunk = bitmap.getNinePatchChunk();
        if(NinePatch.isNinePatchChunk(chunk)) {
            return new NinePatchDrawable(context.getResources(), bitmap, chunk, new Rect(), null);
        } else return new BitmapDrawable(bitmap);
}

然后将其设置为按钮的背景:

button.setBackgroundDrawable(loadNinePatch("/data/data/your.app/files/button_background.9.png", context));

【讨论】:

  • 很好的答案。为我节省了很多时间。
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 2013-04-14
  • 2015-07-29
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
相关资源
最近更新 更多