8

私は可視性がデフォルトで "Gone"に設定されているLinearLayoutを持っています 表示されるときにスライドアウトアニメーションを行うには、このビューの高さを取得する必要があります。 View.getHeightは、レイアウトが呼び出されていないときにゼロを返すので、どのように可視状態の合計の高さを取得しますか?visibility = goneを持つビューの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> 
+5

を。 'GlobalLayoutListener'を使って、レイアウトが構築されたときにコールバックを受け取り、高さを取得し、' View.GONE'に設定してレイアウトを要求します。 – Simon

答えて

12

最初は、高さが計算されるように、最初に表示または非表示にするビューの表示を設定します。後で視界を変える。

FYI:removeGlobalOnLayoutListener()は、APIレベル16以降廃止予定です。removeOnGlobalLayoutListener()に置き換えられました。

あなたはこの試みることができます:最初は `View.VISIBLE`にそれを設定し

// 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); 
     } 

}); 
+4

明確にするために、 'removeGlobalOnLayoutListener()'は名前のタイプミスのために非推奨になっています。 (今のところ)API => 16で使用するのはまだ安全ですが、API 16以上ではOnGlobal、下位レベルではGlobalOnを呼び出す静的ユーティリティメソッドを作成することをおすすめします。 – kcoppock

+0

この方法では動作しません。 – Carl

+0

Take taken from https://stackoverflow.com/a/10134260/5364383 –

関連する問題