2017-05-09 69 views
2

我使用ConstraintLayout来设计一个注册屏幕。我已将ConstraintLayout放在滚动视图中。即使在键盘打开的情况下,用户也应该能够滚动并查看整个内容。此功能在我使用RelativeLayout时有效,但在使用ConstraintLayout时不起作用。屏幕底部的视图隐藏在键盘后面。以下是我正在使用的布局。约束布局滚动到底部打开键盘

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF" 
    android:paddingTop="23dp" 
    android:fillViewport="true" 
    tools:context="com.givhero.activities.LoginActivity"> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="bottom" 
     tools:context="com.givhero.activities.LoginActivity"> 

     <ImageView 
      android:id="@+id/back" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="15dp" 
      android:src="@drawable/back" 
      android:tint="@color/colorPrimary" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toTopOf="parent" 
      tools:layout_editor_absoluteX="0dp"/> 
     <TextView 
      android:id="@+id/regEmail" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dp" 
      android:paddingLeft="10dp" 
      android:text="@string/sign_up_email" 
      android:textColor="@color/colorPrimary" 
      android:textSize="@dimen/titles_lists" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/back" 
      tools:layout_editor_absoluteX="0dp"/> 

     <TextView 
      android:id="@+id/nameEditText" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginEnd="15dp" 
      android:layout_marginLeft="15dp" 
      android:layout_marginRight="15dp" 
      android:layout_marginStart="15dp" 
      android:layout_marginTop="30dp" 
      android:background="@android:color/transparent" 
      android:gravity="left" 
      android:hint="Name" 
      android:textColor="@color/dark" 
      android:textColorHint="@color/dark" 
      android:textSize="@dimen/base" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/regEmail" 
      /> 

     <View 
      android:id="@+id/nameDivider" 
      android:layout_width="0dp" 
      android:layout_height="1dp" 
      android:layout_marginTop="15dp" 
      android:background="@color/divider" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/nameEditText" 
      /> 

     <EditText 
      android:id="@+id/emailEditText" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginEnd="15dp" 
      android:layout_marginLeft="15dp" 
      android:layout_marginRight="15dp" 
      android:layout_marginStart="15dp" 
      android:layout_marginTop="30dp" 
      android:background="@android:color/transparent" 
      android:gravity="left" 
      android:hint="Email" 
      android:inputType="textEmailAddress" 
      android:textColor="@color/dark" 
      android:textColorHint="@color/dark" 
      android:textSize="@dimen/base" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/nameDivider" 
      /> 

     <View 
      android:id="@+id/emailDivider" 
      android:layout_width="0dp" 
      android:layout_height="1dp" 
      android:layout_marginTop="15dp" 
      android:background="@color/divider" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/emailEditText"/> 

     <Button 
      android:id="@+id/submitButton" 
      android:layout_width="0dp" 
      android:layout_height="62dp" 
      android:layout_marginEnd="15dp" 
      android:layout_marginLeft="15dp" 
      android:layout_marginRight="15dp" 
      android:layout_marginStart="15dp" 
      android:layout_marginTop="30dp" 
      android:background="@drawable/button_theme" 
      android:enabled="false" 
      android:text="@string/sign_up" 
      android:textColor="#FFFFFF" 
      android:textSize="@dimen/base" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/emailDivider" 
      /> 

     <TextView 
      android:id="@+id/signUpMessage" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_margin="30dp" 
      android:padding="15dp" 
      android:text="@string/sign_up_message" 
      android:textColor="@color/dark80Opacity" 
      android:textSize="@dimen/medium12" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/submitButton" 
      /> 
    </android.support.constraint.ConstraintLayout> 
</ScrollView> 

我在Manifest中添加了以下内容。

<activity android:name=".activities.EmailSignupActivity" 
      android:screenOrientation="portrait" 
      android:windowSoftInputMode="adjustResize"> 
     </activity> 

虽然它不按预期方式滚动。以下是屏幕截图更好地理解

enter image description here

正如你可以看到我有以下EditText领域和注册按钮一些文本。我期望的是,即使键盘打开,用户也应该能够滚动到页面的底部来查看该文本。请检查下面的截图,当键盘打开时

enter image description here

我无法滚动视图,当键盘打开。

编辑 嘿,

如果有人被套牢这一问题,并降落在这里的答案。我终于可以找到解决方案。我无法弄清楚这个问题的确切原因,但可以找出导致布局不滚动的原因。起初,我一直在试图占据整个屏幕,包括设计状态栏和使用的OnCreate

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

以下上面一行已引起问题,一旦我删除它,我能够滚动布局。如果我们占用包括设计状态栏在内的全屏幕,我会很高兴找到布局不滚动的原因。

回答

1

将此添加到您的活动清单中。

android:windowSoftInputMode="stateVisible|adjustResize"

+0

嘿,我已经尝试过,但它仍然不滚动 – Anu

1

可以使用ConstraintLayoutRelativeLayout的内使用滚动型。给fillViewportScrollView。我只是像我用的那样改变你的代码。当键盘打开时,您应该给marginBottom滚动。试试看。希望它有帮助。

<?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:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#FFFFFF" 
android:paddingTop="23dp" 
tools:context="com.givhero.activities.LoginActivity"> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="bottom" 
    tools:context="com.givhero.activities.LoginActivity"> 

    <ImageView 
     android:id="@+id/back" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="15dp" 
     android:src="@drawable/back" 
     android:tint="@color/colorPrimary" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     tools:layout_editor_absoluteX="0dp"/> 
    <TextView 
     android:id="@+id/regEmail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:paddingLeft="10dp" 
     android:text="@string/sign_up_email" 
     android:textColor="@color/colorPrimary" 
     android:textSize="@dimen/titles_lists" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/back" 
     tools:layout_editor_absoluteX="0dp"/> 

    <TextView 
     android:id="@+id/nameEditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="15dp" 
     android:layout_marginLeft="15dp" 
     android:layout_marginRight="15dp" 
     android:layout_marginStart="15dp" 
     android:layout_marginTop="30dp" 
     android:background="@android:color/transparent" 
     android:gravity="left" 
     android:hint="Name" 
     android:textColor="@color/dark" 
     android:textColorHint="@color/dark" 
     android:textSize="@dimen/base" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/regEmail" 
     /> 

    <View 
     android:id="@+id/nameDivider" 
     android:layout_width="0dp" 
     android:layout_height="1dp" 
     android:layout_marginTop="15dp" 
     android:background="@color/divider" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/nameEditText" 
     /> 

    <EditText 
     android:id="@+id/emailEditText" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="15dp" 
     android:layout_marginLeft="15dp" 
     android:layout_marginRight="15dp" 
     android:layout_marginStart="15dp" 
     android:layout_marginTop="30dp" 
     android:background="@android:color/transparent" 
     android:gravity="left" 
     android:hint="Email" 
     android:inputType="textEmailAddress" 
     android:textColor="@color/dark" 
     android:textColorHint="@color/dark" 
     android:textSize="@dimen/base" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/nameDivider" 
     /> 

    <View 
     android:id="@+id/emailDivider" 
     android:layout_width="0dp" 
     android:layout_height="1dp" 
     android:layout_marginTop="15dp" 
     android:background="@color/divider" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/emailEditText"/> 

    <Button 
     android:id="@+id/submitButton" 
     android:layout_width="0dp" 
     android:layout_height="62dp" 
     android:layout_marginEnd="15dp" 
     android:layout_marginLeft="15dp" 
     android:layout_marginRight="15dp" 
     android:layout_marginStart="15dp" 
     android:layout_marginTop="30dp" 
     android:background="@drawable/button_theme" 
     android:enabled="false" 
     android:text="@string/signup" 
     android:textColor="#FFFFFF" 
     android:textSize="@dimen/base" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/emailDivider" 
     /> 

    <TextView 
     android:id="@+id/signUpMessage" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_margin="30dp" 
     android:padding="15dp" 
     android:text="@string/sign_up_message" 
     android:textColor="@color/dark80Opacity" 
     android:textSize="@dimen/medium12" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/submitButton" 
     android:layout_marginTop="8dp" 
     android:layout_marginBottom="16dp"/> 

</android.support.constraint.ConstraintLayout> 
</ScrollView> 
</RelativeLayout>