【问题标题】:Should we set background in LayoutView or ImageView in Android?我们应该在 Android 的 LayoutView 或 ImageView 中设置背景吗?
【发布时间】:2015-02-09 08:35:32
【问题描述】:
以下两种情况的优缺点是什么:
使用 LayoutView(如 RelativeLayout/LinearLayout)并通过 Drawable 对象调用 setBackground(drawable)
-
在 LayoutView 内部使用 ImageView(宽度:fill_parent,高度:fill_parent)并调用以下内容:
- imageView.setBackground(drawable)
- imageView.setBackgroundResource(resource)
- imageView.setImageBitmap(位图)
- imageView.setImageResource(stub_id)
方法#2 的性能更好吗?如果是这样,为 ImageView 设置背景的推荐方法是什么?
【问题讨论】:
标签:
android
android-layout
android-imageview
android-drawable
android-image
【解决方案1】:
如果我只想为我的布局设置一个简单的背景,我会坚持使用方法 1。请注意,在LayoutView 上应用背景的方法不仅仅是您所指的那种方法,例如:
myLayout.setBackgroundColor(int color);
myLayout.setBackgroundDrawable(Drawable d);
myLayout.setBackgroundResource(int resid);
现在,选择方法#1的原因:
- Android 只会膨胀一个视图,而不是两个,就像它必须在方法 #2 中那样
- Android 会自动将您的图像/drawable/位图调整为
LayoutView 大小。在方法 #2 中,该任务必须由您自己执行,使用 ImageView XML 属性。
- 在方法 #2 中,您将不得不担心管理您的
ImageView 和您的 LayoutView 的其他可能的孩子 Views(相对位置、大小、顺序),因为它们将以一种或另一种方式相关联.在方法 #1 中,您的 LayoutView 背景永远不会与孩子 Views 混在一起。
- 就代码的易读性而言,看到一个
RelativeLayout 和一个孩子ImageView,其唯一的功能是定义背景是没有意义的,除非是非常特殊的情况。你有 android:background 属性。在这种情况下,代码越少越好。
- 在代码中,在方法#2 中,您必须声明两个视图,因此,在这些视图上应用方法需要更多内存。在方法 #1 中,您可以在 3 行代码中完成您需要的操作。
似乎有足够的理由使用方法#1。
对于您问题的第二部分,使用 Drawable 设置背景的最佳方法取决于该 Drawable 的来源(来自资源、生成的 Drawable 对象等)以及您想对该 Drawable 做什么(传递它到位图并进行一些更改等)。
您可以查看每种方法的文档,以更好地了解何时应该使用每种方法。