使用 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 按钮应该粘在底部的主要内容,如果未能解决你的问题,请参考以下文章