如何让孩子的边距影响Android中父母的视图大小?

时间:2012-03-16 17:41:18

标签: android view parent margin

我在 main.xml 中有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <FrameLayout
        android:layout_width="125dp"
        android:layout_height="300dp"
        android:layout_gravity="center"
        android:padding="5dp"
        android:background="#FFFF00">

        <View
            android:id="@+id/placeholder"
            android:layout_width="fill_parent"
            android:layout_height="290dp"
            android:background="#FF0000" />

    </FrameLayout>

</FrameLayout>

MainActivity.java 中的以下代码:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        View view = findViewById(R.id.placeholder);

        MarginLayoutParams mlParams = (ViewGroup.MarginLayoutParams)view.getLayoutParams();
        mlParams.topMargin = 50;
        view.setLayoutParams(mlParams);
    }

}

边距将应用于孩子的视图,但它根本不会影响父视图的大小。我可以通过以下行“解决”这个问题:

((View)view.getParent()).getLayoutParams().height += 50;

但是如何在没有明确更改父级的高度的情况下呢?这是可能的还是没有多大意义?

1 个答案:

答案 0 :(得分:0)

如果您希望内部FrameLayout随子项大小增长,则必须将其高度设置为wrap_content

如果你给它一个固定的高度,就像你在这里做的那样,没有什么能改变它。它将保持固定的大小,无论您调整孩子的大小/边距。这意味着你必须手动调整父大小,如果你想避免wrap_content(正如你已经说过的那样)。

顺便说一下:放置内容的根视图组始终是FrameLayout。这意味着您在FrameLayout中的FrameLayout中创建FrameLayout。 :)这可能会加深视图层次不必要,取决于你是否在这里有其他意见。深层次的表现不利于表现,如果可以,请保持平衡。也许看一下<merge /> tag