Android getHeight用于可见性为0的视图
我有一个LinearLayout,其可见性默认设置为“Gone”, 我需要获得该视图的高度,以便在其可见时进行滑出动画。 如何获得可见状态的总高度,因为 未调用布局时,View.getHeight返回零Android getHeight用于可见性为0的视图,android,android-layout,android-animation,android-view,android-ui,Android,Android Layout,Android Animation,Android View,Android Ui,我有一个LinearLayout,其可见性默认设置为“Gone”, 我需要获得该视图的高度,以便在其可见时进行滑出动画。 如何获得可见状态的总高度,因为 未调用布局时,View.getHeight返回零 <LinearLayout android:id="@+id/card_checkin_layout_termsconditionsconfirmation" android:layout_width="match_parent" android:layout_he
<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>
首先将视图的可见性设置为可见或不可见,以便计算高度。稍后将可见性更改为“已消失” 仅供参考:
removeGlobalLayOutliner()
由于API级别16而被弃用,它被removeOnGlobalLayOutliner()
取代
您可以尝试以下方法:
// 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);
}
});
最初将其设置为查看可见。使用
GlobalLayoutListener
在构建布局时接收回调,获取高度,然后将其设置为View.GONE
并请求布局。只是为了澄清一下,RemoveGlobalOnlayOutliner()
仅因命名错误而被弃用。在API>=16上使用(目前)仍然是安全的,但我建议创建一个静态实用程序方法,对API 16及以上版本调用OnGlobal,对较低级别调用GlobalOn。