Неверный размер представления в RelativeLayout
У меня есть RelativeLayout ниже. В ней есть расширяемый вид и раскладывающаяся рамка. RevealFrameLayout выровнен по нижней части экрана и находится ниже ExpandableView. Когда пользователь нажимает fab, открывается анимация, которая начинается с центра fab и показывает раскладку.
<?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
вместо getMeasuredWidth
а также getMeasuredHeight
, Согласно документации для View
:
int getMeasuredWidthAndState ()
Возвращает информацию об измерении полной ширины для этого представления, рассчитанную по последнему вызову для измерения (int, int). Этот результат является битовой маской, определенной MEASURED_SIZE_MASK и MEASURED_STATE_TOO_SMALL. Это следует использовать только во время измерений и расчетов компоновки. Используйте getWidth(), чтобы увидеть, насколько широк вид после макета.
Акцент мой, и это относится к getMeasuredWidth
а также getMeasuredHeight
также.