【问题标题】:How can I have a child's margins affect the parent's view size in Android?如何让孩子的边距影响 Android 中父母的视图大小?
【发布时间】:2012-03-17 01:56:47
【问题描述】:

我在 ma​​in.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;

但是我怎么能做到这一点不明确改变父母的`身高?这是可能的还是没有多大意义?

【问题讨论】:

    标签: android view parent margin


    【解决方案1】:

    如果您希望内部 FrameLayout 与子尺寸一起增长,您必须将其高度设置为wrap_content

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

    顺便说一句:放置内容的根视图组始终是 FrameLayout。这意味着你在一个FrameLayout中创建一个FrameLayout。 :) 这可能会加深不必要的视图层次结构,具体取决于您是否在此处获得其他视图。深层次不利于性能,如果可以的话,保持平坦。也许看看&lt;merge /&gt; tag

    【讨论】:

    • 不行,需要固定大小。但既然没有其他办法,我想这是正确的答案:) 关于根视图组,不用担心。这只是一个例子。我只是用了我面前的东西。
    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2022-10-02
    • 2011-10-11
    • 2015-03-05
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多