我有什么方法可以将layout_width和layout_height参数添加到我的自定义视图中吗?我知道有一些内置的android视图,你不必提供这些属性。
答案 0 :(得分:2)
View不负责决定是否可以/应该提供这些属性。父ViewGroup指示这些属性是否是必需的。例如,TableRow使它们成为可选的。其他布局(LinearLayout,FrameLayout等)需要这些参数。
答案 1 :(得分:0)
您何时不想使用高度和宽度参数?我不确定,但我认为这会导致他们甚至没有出现在布局上?
点击此处查看参考http://developer.android.com/guide/topics/ui/declaring-layout.html#layout-params
答案 2 :(得分:0)
来自Dave所建议的Reference。
所有视图组都包含宽度和高度(layout_width和 layout_height),每个视图都需要定义它们。许多 LayoutParams还包括可选的边距和边框。
所以看起来,你必须。
答案 3 :(得分:0)
如果您想要减少常用和冗余属性,那么您应该尝试样式化。
开发者指南here。
答案 4 :(得分:0)
问题在于ViewGroup.LayoutParams.setBaseAttributes()
使用严格getLayoutDimension(int, String)
。
您需要扩展所需的LayoutParams并覆盖setBaseAttributes
。
在里面您可以手动设置宽度和高度,也可以使用更宽松的getLayoutDimension(int, int)
。最后,您必须在布局类中覆盖您正在使用自己的LayoutParams。
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(getContext(), attrs);
}
public static class LayoutParams extends FrameLayout.LayoutParams {
public LayoutParams(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
width = a.getLayoutDimension(widthAttr, WRAP_CONTENT);
height = a.getLayoutDimension(heightAttr, WRAP_CONTENT);
}
}