Android 布局宽度和布局高度
有没有什么方法可以让我不必在自定义视图中添加layout_width和layout_height参数?我知道有一些内置android视图不需要提供这些属性。什么时候不使用高度和宽度参数?我不确定,但我认为这会导致他们甚至没有出现在布局上 请在此处查找Dave建议的同一份参考资料 所有视图组都包括宽度和高度(布局、宽度和宽度) 布局(U高度),每个视图都需要定义它们。许多的 LayoutParams还包括可选的边距和边框Android 布局宽度和布局高度,android,android-layout,Android,Android Layout,有没有什么方法可以让我不必在自定义视图中添加layout_width和layout_height参数?我知道有一些内置android视图不需要提供这些属性。什么时候不使用高度和宽度参数?我不确定,但我认为这会导致他们甚至没有出现在布局上 请在此处查找Dave建议的同一份参考资料 所有视图组都包括宽度和高度(布局、宽度和宽度) 布局(U高度),每个视图都需要定义它们。许多的 LayoutParams还包括可选的边距和边框 看来,你必须这么做 视图不负责决定是否可以/应该提供这些属性。父视图组指示这
看来,你必须这么做 视图不负责决定是否可以/应该提供这些属性。父视图组指示这些属性是否是必需的。例如,TableRow使它们成为可选的。其他布局(LinearLayout、FrameLayout等)需要这些参数。如果您希望减少公共和冗余属性,则应尝试设置样式
开发者指南。问题在于
ViewGroup.LayoutParams.setBaseAttributes()
使用严格的getLayoutDimension(int,String)
。
您需要扩展所需的任何LayoutParams并覆盖setBaseAttributes
。
在内部,您可以手动设置宽度和高度,也可以使用更宽松的getLayoutDimension(int,int)
。最后,您必须在layout类中重写您正在使用自己的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);
}
}
与表非常相似,我不需要它们,因为父视图控制子视图的布局参数。因此,我在XML中指定的属性根本不起任何作用。TableRow视图组如何解决这个问题?@NicholasRoge我不知道
视图组
,但它说它是一个抽象类
(),而扩展它的类,他们实现了layout\u height
和layout\u width
@NicholasRoge,但正如我所说,我不知道。例如,能否定义视图组并将其用作xml中的布局?我对此表示怀疑。@NicholasRoge如果你想让家长安排你的CustomControl的宽度和高度,为什么不使用“匹配家长”?我没有这样想过。在这种情况下,我如何使父视图组允许XML“嘿,这家伙不需要向我展示这些东西。”?但我不想这样做。这是搬家。他们根本没有必要在那里。