0

我在下面有一個RelativeLayout。它有一個可擴展的視圖和一個顯示框架佈局。 RevealFrameLayout對齊屏幕底部,低於ExpandableView。當用戶點擊fab揭示動畫時,將從fab中心開始並顯示揭示幀佈局。RelativeLayout中的視圖大小不正確

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:id="@+id/root" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/expandable_frame" 
    android:layout_width="match_parent" 
    android:layout_height="250dp" 
    android:layout_alignParentTop="true" 
    android:background="@color/colorPrimary" 
    android:elevation="16dp" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <TextView 
     android:id="@+id/app_name_tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|start" 
     android:padding="16dp" 
     android:text="@string/app_name" 
     android:textAppearance="@style/ExtraLargeText"/> 

</FrameLayout> 

<TextView 
    android:id="@+id/error_tv" 
    android:layout_width="match_parent" 
    android:layout_height="60dp" 
    android:layout_below="@id/expandable_frame" 
    android:background="@color/mid_grey" 
    android:gravity="center" 
    android:textColor="@color/error_red" 
    android:visibility="invisible" 
    tools:text="@string/error_login" 
    tools:visibility="visible"/> 

<android.support.design.widget.TextInputLayout 
    android:id="@+id/username_til" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/error_tv" 
    android:layout_marginEnd="16dp" 
    android:layout_marginStart="16dp"> 

    <android.support.design.widget.TextInputEditText 
     android:id="@+id/username_tiet" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/username" 
     android:inputType="text" 
     android:lines="1" 
     android:nextFocusDown="@+id/password_tiet"/> 

</android.support.design.widget.TextInputLayout> 

<android.support.design.widget.TextInputLayout 
    android:id="@+id/password_til" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/username_til" 
    android:layout_marginEnd="16dp" 
    android:layout_marginStart="16dp"> 

    <android.support.design.widget.TextInputEditText 
     android:id="@id/password_tiet" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/password" 
     android:inputType="textPassword" 
     android:lines="1"/> 

</android.support.design.widget.TextInputLayout> 

<FrameLayout 
    android:id="@+id/loading_reveal_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_below="@id/expandable_frame" 
    android:background="@color/colorAccent" 
    android:visibility="invisible"> 

    <com.wang.avi.AVLoadingIndicatorView 
     android:id="@+id/loading_animation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:visibility="invisible"/> 

</FrameLayout> 

<WebView 
    android:id="@+id/web_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_below="@id/expandable_frame" 
    android:visibility="gone"/> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/login_fab" 
    android:layout_width="56dp" 
    android:layout_height="56dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    android:layout_margin="16dp" 
    android:tint="@android:color/white" 
    app:srcCompat="@drawable/ic_ok"/> 

</RelativeLayout> 

我計算工廠的中心是這樣的:

 int cx = mLoginFab.getRight() - mLoginFab.getMeasuredWidth()/2; 
     int cy = mLoginFab.getBottom() - mLoginFab.getMeasuredHeight()/2; 

但我得到的總是比晶圓廠的位置較低的座標。它看起來像Reveal Frame Layout的底部超出了手機屏幕邊界。

有沒有人知道這個佈局有什麼問題,以及如何獲得實際的晶圓中心座標?

在此先感謝。

回答

1

嘗試getWidth()getHeight而不是getMeasuredWidthgetMeasuredHeight。根據documentation for View

INT getMeasuredWidthAndState()該視圖爲計算由最近一次調用來測量(INT,INT)

返回全寬的測量信息。這個結果是由MEASURED_SIZE_MASK和MEASURED_STATE_TOO_SMALL定義的一個位掩碼。 這隻應在測量和佈局計算中使用。使用getWidth()來查看佈局後視圖的寬度。

重點是我的,這適用於getMeasuredWidthgetMeasuredHeight爲好。

相關問題