8

デフォルトで可視性が「Gone」に設定されている LinearLayout があります。このビューが表示されるときにスライドアウトアニメーションを実行するには、このビューの高さを取得する必要があります。レイアウトが呼び出されていないときに View.getHeight がゼロを返すため、表示状態の合計の高さを取得するにはどうすればよいですか。

<LinearLayout
    android:id="@+id/card_checkin_layout_termsconditionsconfirmation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:gravity="center_horizontal"
    android:background="#d0d0d0"
    android:visibility="invisible"
    android:orientation="vertical" >

    <Button
        android:id="@+id/card_checkin_button_confirmdetails"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:background="@drawable/shape_checkin_buttons2"
        android:text=">   Confirm your details"
        android:paddingLeft="8dp"            
        android:gravity="left|center_vertical"
        android:textColor="@color/card_checkin_button_textcolor_blue" 
        />

    <Button
        android:id="@+id/card_checkin_button_termsandconditions"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:paddingLeft="8dp"            
        android:background="@drawable/shape_checkin_buttons2"
        android:text=">   Terms and Conditions"
        android:gravity="left|center_vertical"
        android:textColor="@color/card_checkin_button_textcolor_blue" 
        />

</LinearLayout>
4

1 に答える 1

11

高さが計算されるように、最初にビューの可視性を可視または不可視に設定します。後で可視性をなくなったに変更します。

参考までに:removeGlobalOnLayoutListener()は API レベル 16 から廃止され、 に置き換えられましたremoveOnGlobalLayoutListener()

これを試すことができます:

// onCreate or onResume or onStart ...
mView = findViewByID(R.id.someID);
mView.getViewTreeObserver().addOnGlobalLayoutListener( 
    new OnGlobalLayoutListener(){

        @Override
        public void onGlobalLayout() {
            // gets called after layout has been done but before display
            // so we can get the height then hide the view    

            mHeight = mView.getHeight();  

            mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            mView.setVisibility(View.GONE);
        }

});
于 2013-08-16T15:39:08.050 に答える