【问题标题】:The Android keyboard is changing the components of ConstraintLayoutAndroid 键盘正在改变 ConstraintLayout 的组件
【发布时间】:2020-07-12 19:45:41
【问题描述】:

我有一个以 ConstraintLayout 作为根的布局,该布局属于 ViewPager2 中显示的 Fragment,由扩展 FragmentActivity 的 Activity 托管。我的问题是每次键盘启动时,它都不会与布局重叠,它会使窗口变小,从而改变我的布局方面。

ViewPager 布局:

<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".activities.WelcomeActivity">


<androidx.constraintlayout.widget.Guideline
    android:id="@+id/guideline4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_begin="20dp"
    app:layout_constraintGuide_percent=".5" />

<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/welcome_viewPager2"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<me.relex.circleindicator.CircleIndicator3
    android:id="@+id/welcome_indicator"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    app:layout_constraintBottom_toTopOf="@+id/view5"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

<View
    android:id="@+id/view5"
    android:layout_width="1dp"
    android:layout_height="0dp"
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:background="@android:color/white"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/welcome_btnLogar" />

<Button
    android:id="@+id/welcome_btnLogar"
    style="?android:buttonBarButtonStyle"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="@color/transparentBlack"
    android:text="@string/login"
    android:textAppearance="@style/TextAppearance.AppCompat.Body2"
    android:textColor="@android:color/white"
    android:textSize="16sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/view5"
    app:layout_constraintStart_toStartOf="parent" />

<Button
    android:id="@+id/welcome_btnRegister"
    style="?android:buttonBarButtonStyle"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="@color/transparentBlack"
    android:text="@string/create_an_account"
    android:textAppearance="@style/TextAppearance.AppCompat.Body2"
    android:textColor="@android:color/white"
    android:textSize="16sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/view5" />

片段布局:

<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".activities.CadastroActivity">

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/cadastro_frag1_inputLayout_ame"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:hint="@string/name"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.25"
    app:startIconDrawable="@drawable/ic_android_gray_24dp">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/cadastro_frag1_inputEdit_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/cadastro_frag1_inputLayout_email"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:hint="@string/email"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cadastro_frag1_inputLayout_ame"
    app:startIconDrawable="@drawable/ic_email_gray_24dp">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/cadastro_frag1_inputEdit_email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/cadastro_frag1_inputLayout_password"
    android:layout_width="0dp"
    app:startIconDrawable="@drawable/ic_lock_open_gray_24dp"
    android:layout_height="wrap_content"
    app:helperText="@string/min_6_characters"
    app:helperTextTextColor="@color/colorAccentWelcome"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    app:counterEnabled="true"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:hint="@string/password"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cadastro_frag1_inputLayout_email"
    app:passwordToggleEnabled="true">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/cadastro_frag1_inputEdit_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/cadastro_frag1_inputLayout_confirmPassword"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="8dp"
    app:counterEnabled="true"
    android:layout_marginRight="8dp"
    android:hint="@string/confirm_your_password"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cadastro_frag1_inputLayout_password"
    app:passwordToggleEnabled="true">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/cadastro_frag1_inputEdit_confirmPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>

<Button
    android:id="@+id/cadastro_frag1_btnNextStep"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="32dp"
    android:layout_marginLeft="32dp"
    android:layout_marginEnd="32dp"
    android:layout_marginRight="32dp"
    android:textColor="@android:color/white"
    android:text="@string/go_to_next_step"
    android:background="@drawable/shape_btn_all_round_welcome_accent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cadastro_frag1_inputLayout_confirmPassword" />

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="sans-serif-condensed-medium"
    android:text="@string/step_1_2"
    android:textAppearance="@style/TextAppearance.AppCompat.Display1"
    android:textColor="@color/colorAccentWelcome"
    android:textStyle="bold"
    app:layout_constraintBottom_toTopOf="@+id/cadastro_frag1_inputLayout_ame"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

如何让键盘与布局重叠?

【问题讨论】:

    标签: android android-studio android-layout android-fragments


    【解决方案1】:

    在您的AndroidManifest.xml 上添加windowSoftInputMode

     <activity
        android:name=".YourActivity"
        android:windowSoftInputMode="adjustPan"/>
    

    或以编程方式

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    

    根据documentation

    • 当 Activity 成为用户关注的焦点时,软键盘的状态(无论是隐藏还是可见)。
    • 对 Activity 的主窗口所做的调整 - 是否将其大小调整为更小以便为软键盘腾出空间,或者是否将其内容平移以使当前焦点在窗口的一部分被软键盘覆盖时可见。

    如果您需要在键盘打开时滚动页面,请将您的 ConstraintLayout 添加到 ScrollView 中

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <!-- xml code-->
     </androidx.constraintlayout.widget.ConstraintLayout>
    
    </ScrollView>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-17
      • 2020-10-04
      • 1970-01-01
      • 2022-11-07
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      相关资源
      最近更新 更多