我有一个垂直的 LinearLayout,有 2 个视图在彼此之上。顶视图应该是一个可展开的面板 - 如果单击,它应该向下展开,但不会影响其他视图。我希望底视图始终与顶视图的“封闭”版本对齐。顶视图应该动画到打开的版本,所以我不能只是把打开的版本隐藏在后面。
你将如何做到这一点?
我有一个垂直的 LinearLayout,有 2 个视图在彼此之上。顶视图应该是一个可展开的面板 - 如果单击,它应该向下展开,但不会影响其他视图。我希望底视图始终与顶视图的“封闭”版本对齐。顶视图应该动画到打开的版本,所以我不能只是把打开的版本隐藏在后面。
你将如何做到这一点?
LinearLayout 将不允许您要求的内容。没有一组布局参数允许 LinearLayout 中的子级重叠。
您可以改用 FrameLayout。这里的诀窍是让布局恰到好处。这是您如何做到这一点的一个示例。ID 为 topview 和 bottomview 的 ImageView 是您关心的视图,其余部分是使视图位于您想要的位置的结构。
<?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">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="fill_parent"
android:layout_height="70dip" />
<ImageView
android:id="@+id/bottomview"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="#FFFF0000"/>
</LinearLayout>
<ImageView
android:id="@+id/topview"
android:layout_width="fill_parent"
android:layout_height="70dip"
android:background="#FF00FF00"/>
</FrameLayout>
然后你只需要在顶视图中添加一个 onClick 监听器并更改布局参数。例如,这是一个扩展视图的快速示例。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView i=(ImageView)findViewById(R.id.topview);
i.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Make the view bigger
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,300);
v.setLayoutParams(lp);
v.invalidate();
}
});
... more code...
剩下的就是添加代码来跟踪展开/折叠状态并添加动画。
希望有帮助。