自定义视图,不需要xml中的layout_width

时间:2017-01-28 08:41:46

标签: android android-layout

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要求?

2 个答案:

答案 0 :(得分:1)

据我所知,工具需要这些属性,并且在工具本身中对TableLayout和TableRow等某些框架小部件进行了例外处理。这可能与这些小部件为其子代生成LayoutParams的方式有关;通常,缺少layout_widthlayout_height会在运行时导致异常,但这两个小部件都会在各自的setBaseAttributes()类中覆盖LayoutParams,不会抛出异常而是设置异常像MATCH_PARENT这样的值。

您可以尝试执行相同操作,但如果您不在XML中提供这些属性,我希望构建工具仍会产生警告或错误。也许还有一种方法可以压制它,但我不认为你只能为自定义ViewGroup的子视图压制它,所以说实话,如果我是你,我就不会遇到麻烦。< / p>

没有什么说你必须尊重XML中给出的宽度和高度,你仍然可以做任何事情&#34;魔法&#34;如果您决定将自定义ViewGroup提供给其他开发人员,您可能会打破期望。

答案 1 :(得分:0)

我不认为你可以真正做到这一点,但你可以尝试将它们设置为零,给布局一个ID并尝试通过java做你想做的事情......虽然我不确定这是否会起作用