我在 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;
但是如何在没有明确更改父级的高度的情况下呢?这是可能的还是没有多大意义?
答案 0 :(得分:0)
如果您希望内部FrameLayout随子项大小增长,则必须将其高度设置为wrap_content
。
如果你给它一个固定的高度,就像你在这里做的那样,没有什么能改变它。它将保持固定的大小,无论您调整孩子的大小/边距。这意味着你必须手动调整父大小,如果你想避免wrap_content(正如你已经说过的那样)。
顺便说一下:放置内容的根视图组始终是FrameLayout。这意味着您在FrameLayout中的FrameLayout中创建FrameLayout。 :)这可能会加深视图层次不必要,取决于你是否在这里有其他意见。深层次的表现不利于表现,如果可以,请保持平衡。也许看一下<merge />
tag。