使用 adjustResize 按钮应该粘在底部

Posted

技术标签:

【中文标题】使用 adjustResize 按钮应该粘在底部【英文标题】:Button should be sticky at Bottom with 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_
    android:layout_ tools:context=".items.ui.AddEditItemFragment">


    <ScrollView android:id="@+id/sv_add_edit_item" android:layout_
        android:layout_ 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_ android:layout_
            android:orientation="vertical">

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_
                android:layout_ 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_
                    android:layout_ android:inputType="textCapWords"
                    android:maxLines="1" />

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

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_
                android:layout_ 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_
                    android:layout_ android:inputType="textCapWords"
                    android:maxLines="1" />

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

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_
                android:layout_ 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_
                    android:layout_ android:inputType="textCapWords"
                    android:maxLines="1" />

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


            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_
                android:layout_ 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_
                    android:layout_ android:inputType="textCapWords"
                    android:maxLines="1" />

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

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_
                android:layout_ 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_
                    android:layout_ android:inputType="textCapWords"
                    android:maxLines="1" />

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


            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_
                android:layout_ 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_
                    android:layout_ android:inputType="textCapWords"
                    android:maxLines="1" />

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

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/itemNameInputLayout" android:layout_
                android:layout_ 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_
                    android:layout_ 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_ 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 已添加...请检查 参考这个***.com/questions/5516216/… 不工作,我保持我的活动adjustPan 和滚动视图保持isScrollContainer = false 但不工作 我想在键盘打开时滚动,但按钮应该粘在底部 【参考方案1】:

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

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

【讨论】:

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

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

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

【讨论】:

如果我保持它为 adjustPan 我的布局将不会滚动 要将它与滚动视图一起使用,您可以使用android:windowSoftInputMode="adjustResize|stateHidden" 是的,但是我的按钮会出现在键盘的顶部,检查我在问题中发布的 XML

以上是关于使用 adjustResize 按钮应该粘在底部的主要内容,如果未能解决你的问题,请参考以下文章

使单元格粘在表格视图的底部

如何让 UIButton 粘在 UIView 的底部

自动布局粘在底部

键盘上方的android按钮[重复]

Android 底部按钮被软键盘顶起问题解决

使用 UITableViewController 时如何让 pickerView 粘在底部?