0

2つのビューが重なり合った垂直LinearLayoutがあります。上面ビューは展開可能なパネルである必要があります。クリックすると、他のビューに影響を与えることなく、下に展開する必要があります。底面図を常に上面図の「閉じた」バージョンに揃えたい。上面図は開いたバージョンにアニメーション化する必要があるため、開いたバージョンを背後に隠すことはできません。

これをどのように達成しますか?

4

1 に答える 1

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

残りは、展開/折りたたみ状態を追跡するためのコードの追加とアニメーションの追加です。

お役に立てば幸いです。

于 2011-03-31T16:03:22.420 に答える