为什么布局参数在Android编程中有效?

Inc*_*982 7 java android android-layout

首先是我的背景:我是刚接触Ruby的Java新手.如果这有帮助.

我对布局参数如何工作感到困惑.我正在关注创建Android应用程序的基本Hello World简介.第1步,扩展Activity类,使用onCreate()方法访问XML布局.好的,我明白了.

然后我在Main.XML中创建一个布局(比如RelativeLayout).所以这是利用了扩展ViewGroup类的RelativeLayout类,到目前为止还可以.然后让我说我在里面创建一个按钮.这是我的问题开始的地方.如果我查看我正在关注的示例,我会看到属性被分配给属于RelativeLayout类的按钮(即:android:layout_alignParentRight ="true").这些似乎是布局参数.但为什么这有效呢?按钮类似乎继承自View类.为什么按钮对象可以接受RelativeLayout对象的属性?也许我的Ruby编程让我很困惑..

谢谢!

更新:为了后人:感谢Slothsberry指出XML Layouts链接,它似乎在"属性"和"布局参数"部分的两个部分中清楚地描述了答案.属性部分如下:

每个View和ViewGroup对象都支持各种XML属性.某些属性特定于View对象(例如,TextView支持textSize属性),但这些属性也可由任何可扩展此类的View对象继承.有些对于所有View对象都是通用的,因为它们是从根View类继承的(就像id属性一样).并且,其他属性被认为是"布局参数",这是描述View对象的特定布局方向,由对象的父ViewGroup中对象定义的属性.

布局参数部分可能是真正回答这个问题的部分.它声明:

每个ViewGroup类都实现一个扩展ViewGroup.LayoutParams的嵌套类.此子类包含定义每个子视图的大小和位置的属性类型,适用于视图组.如图1所示,父视图组定义了每个子视图(包括子视图组)的布局参数.

他们也提供了一个很好的图表.似乎初学程序员需要认识到,在引用Java类时,XML更像是一个CSS表,并且在计算并将其转移到Java类对应项之前,首先以嵌套方式计算属性.这是我目前的理解反正:)

Pla*_*eon 6

布局参数不严格镜像对象继承(正如您所注意到的).原因是布局有两个部分:配置视图,并使用该视图作为参数参数化视图的父级.

因此,如果父布局不是RelativeLayout,那么像android:layout_below这样的参数将被忽略.从OOP的角度来看,将该参数放在RelativeLayout对象中可能是有意义的.但这就是你如何在java代码中做到这一点.

在XML代码中,它采用的方式是关于子项的信息包含在子项中.布局膨胀时,将忽略需要父项不存在的布局参数.它是一个很好的系统,用于使XML更具可读性和可移植性.并不是严格意义上的类包结构,而是人们考虑将事物放置在布局中的直观方式.