将adjustResize与片段和requestFocus一起使用

时间:2017-04-07 11:48:26

标签: android android-layout android-fragments

我尝试创建一个活动,其中一个RelativeLayout用作片段容器,其中每个片段都有一个单独的背景颜色,在半透明的状态栏下流血,以及整个活动的位置考虑键盘大小。

活动的布局是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

片段包裹着:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true" />

活动定义为:

<activity android:screenOrientation="portrait"
          android:name=".login.LoginActivity"
          android:windowSoftInputMode="adjustResize" />

第一个片段的一切正常。活动调整RelativeLayout的大小,其中包含的片段调整大小以调整键盘,一切都很好。但是,当将一个片段替换为在<requestFocus />上使用<EditText />的另一个片段时,键盘会保持向上但推入的第二个片段占据整个屏幕大小(在键盘下)。关闭并重新打开键盘会导致活动重新测量,然后一切都很好。类似地,如果键盘在片段转换期间改变高度(当从不支持自动校正的字段移动到那个,那么键盘变高),片段正确测量。因此,当键盘大小不变的两个片段之间进行转换时,它似乎只是一个问题。

fitsSytemWindows=true添加到包装RelativeLayout可以解决问题,但也会阻止片段视图显示在状态栏下,这不是我想要的。是否有某种方法可以强制片段重新测量或者我失踪的东西?这是使用本机片段,而不是app-compat。

0 个答案:

没有答案