0

我有一个垂直的 LinearLayout,有 2 个视图在彼此之上。顶视图应该是一个可展开的面板 - 如果单击,它应该向下展开,但不会影响其他视图。我希望底视图始终与顶视图的“封闭”版本对齐。顶视图应该动画到打开的版本,所以我不能只是把打开的版本隐藏在后面。

你将如何做到这一点?

4

1 回答 1

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...

剩下的就是添加代码来跟踪展开/折叠状态并添加动画。

希望有帮助。

于 2011-03-31T16:03:22.420 回答