【问题标题】:Button should be sticky at Bottom with adjustResize使用 adjustResize 按钮应该粘在底部
【发布时间】:2020-03-17 21:28:28
【问题描述】:

我想要一个在键盘打开时应该在底部粘着的按钮。

线性布局,长格式包含多个垂直方向的edittext

按钮位于scrollview的底部和外部

Manifest 有一个 adjustsize 属性

所以当我点击任何编辑文本时,按钮会出现在键盘顶部。

我什至尝试过android:fitsToSystemWindow=true,但没有任何效果

我想要这样的东西,其中按钮不会出现在键盘上,并且按钮也应该在底部保持粘性。我怎样才能做到这一点?

这是我的 XML 文件

<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=".items.ui.AddEditItemFragment">


    <ScrollView android:id="@+id/sv_add_edit_item" android:layout_width="match_parent"
        android:layout_height="0dp" app:layout_constraintBottom_toTopOf="@+id/btn_save"
        app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
            android:orientation="vertical">

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_width="match_parent"
                android:layout_height="wrap_content" android:background="@color/white"
                android:padding="@dimen/default_margin_padding" app:errorEnabled="true"
                app:errorTextAppearance="@style/ErrorText" app:hintTextAppearance="@style/HintText">

                <com.google.android.material.textfield.TextInputEditText
                    style="@style/editTextInputLayout" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:inputType="textCapWords"
                    android:maxLines="1" />

            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_width="match_parent"
                android:layout_height="wrap_content" android:background="@color/white"
                android:padding="@dimen/default_margin_padding" app:errorEnabled="true"
                app:errorTextAppearance="@style/ErrorText" app:hintTextAppearance="@style/HintText">

                <com.google.android.material.textfield.TextInputEditText
                    style="@style/editTextInputLayout" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:inputType="textCapWords"
                    android:maxLines="1" />

            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_width="match_parent"
                android:layout_height="wrap_content" android:background="@color/white"
                android:padding="@dimen/default_margin_padding" app:errorEnabled="true"
                app:errorTextAppearance="@style/ErrorText" app:hintTextAppearance="@style/HintText">

                <com.google.android.material.textfield.TextInputEditText
                    style="@style/editTextInputLayout" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:inputType="textCapWords"
                    android:maxLines="1" />

            </com.google.android.material.textfield.TextInputLayout>


            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_width="match_parent"
                android:layout_height="wrap_content" android:background="@color/white"
                android:padding="@dimen/default_margin_padding" app:errorEnabled="true"
                app:errorTextAppearance="@style/ErrorText" app:hintTextAppearance="@style/HintText">

                <com.google.android.material.textfield.TextInputEditText
                    style="@style/editTextInputLayout" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:inputType="textCapWords"
                    android:maxLines="1" />

            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_width="match_parent"
                android:layout_height="wrap_content" android:background="@color/white"
                android:padding="@dimen/default_margin_padding" app:errorEnabled="true"
                app:errorTextAppearance="@style/ErrorText" app:hintTextAppearance="@style/HintText">

                <com.google.android.material.textfield.TextInputEditText
                    style="@style/editTextInputLayout" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:inputType="textCapWords"
                    android:maxLines="1" />

            </com.google.android.material.textfield.TextInputLayout>


            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_width="match_parent"
                android:layout_height="wrap_content" android:background="@color/white"
                android:padding="@dimen/default_margin_padding" app:errorEnabled="true"
                app:errorTextAppearance="@style/ErrorText" app:hintTextAppearance="@style/HintText">

                <com.google.android.material.textfield.TextInputEditText
                    style="@style/editTextInputLayout" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:inputType="textCapWords"
                    android:maxLines="1" />

            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_width="match_parent"
                android:layout_height="wrap_content" android:background="@color/white"
                android:padding="@dimen/default_margin_padding" app:errorEnabled="true"
                app:errorTextAppearance="@style/ErrorText" app:hintTextAppearance="@style/HintText">

                <com.google.android.material.textfield.TextInputEditText
                    style="@style/editTextInputLayout" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:inputType="textCapWords"
                    android:maxLines="1" />

            </com.google.android.material.textfield.TextInputLayout>


        </LinearLayout>

    </ScrollView>

    <Button android:id="@+id/btn_save" style="@style/buttonThemeColor"
        android:layout_width="match_parent" android:text="@string/save"
        app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>```

Any help will be appreciated

【问题讨论】:

  • 尝试在此处发布您的 xml 布局,以便我们看到问题
  • @L2 已添加...请检查
  • 不工作,我保持我的活动adjustPan 和滚动视图保持isScrollContainer = false 但不工作
  • 我想在键盘打开时滚动,但按钮应该粘在底部

标签: android xml android-layout kotlin


【解决方案1】:

一种方法是添加全局监听器来检测键盘是否显示。然后相应地隐藏/显示您的按钮。

您也可以向我的this answer 寻求帮助。

【讨论】:

  • 除此之外,只有 XML 之类的任何其他方式我都可以这样做,因为当我有自定义键盘时,它会变得难以处理
  • @drjansari 我在底部标签有类似的情况,但找不到任何其他解决方案,所以最终这样做了。此外,我使用的侦听器基于视图高度而不是任何事件,因此它也适用于自定义键盘。
【解决方案2】:

在你的清单文件中使用adjustPan 代替windowSoftInputMode 而不是adjustResize

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

【讨论】:

  • 如果我保持它为 adjustPan 我的布局将不会滚动
  • 要将它与滚动视图一起使用,您可以使用android:windowSoftInputMode="adjustResize|stateHidden"
  • 是的,但是我的按钮会出现在键盘的顶部,检查我在问题中发布的 XML
猜你喜欢
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多