Android SDK具有TableLayout容器:
<TableLayout
android:id="@+id/tablelayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TableRow>
<TextView
android:text="Some text"
android:padding="3dip" />
</TableRow>
</TableLayout>
TableLayout有layout_width和layout_height。几乎每个View都需要在xml中指定layout_width和layout_height。但TableRow不需要它。
我想创建Layout(从FrameLayout扩展)哪些元素不需要layout_width和layout_height(我会用一些魔法在内部计算大小)。
如何从我的自定义视图中删除xml中的layout_width / layout_height要求?
答案 0 :(得分:1)
据我所知,工具需要这些属性,并且在工具本身中对TableLayout和TableRow等某些框架小部件进行了例外处理。这可能与这些小部件为其子代生成LayoutParams的方式有关;通常,缺少layout_width
或layout_height
会在运行时导致异常,但这两个小部件都会在各自的setBaseAttributes()
类中覆盖LayoutParams
,不会抛出异常而是设置异常像MATCH_PARENT
这样的值。
您可以尝试执行相同操作,但如果您不在XML中提供这些属性,我希望构建工具仍会产生警告或错误。也许还有一种方法可以压制它,但我不认为你只能为自定义ViewGroup的子视图压制它,所以说实话,如果我是你,我就不会遇到麻烦。< / p>
没有什么说你必须尊重XML中给出的宽度和高度,你仍然可以做任何事情&#34;魔法&#34;如果您决定将自定义ViewGroup提供给其他开发人员,您可能会打破期望。
答案 1 :(得分:0)
我不认为你可以真正做到这一点,但你可以尝试将它们设置为零,给布局一个ID并尝试通过java做你想做的事情......虽然我不确定这是否会起作用