我有一个垂直的LinearLayout,彼此之间有2个视图。 顶视图应该是可展开的面板 - 如果单击,它应该向下展开,但不会影响其他视图。 我希望底部视图始终由顶视图的“封闭”版本对齐。 顶视图应该为打开的版本设置动画,因此我不能只隐藏打开的版本。
你将如何实现这一目标?
答案 0 :(得分:2)
LinearLayout不允许您要求的内容。没有一组布局参数允许LinearLayout中的子项重叠。
您可以使用FrameLayout。这里的诀窍是让布局恰到好处。这是一个如何做到这一点的例子。具有顶视图和底视图ID的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...
其余的将是添加代码以跟踪展开/折叠状态并添加动画。
希望有所帮助。