如何修复出现键盘时 EditText 缩小的问题
How to fix the shrinking of EditText while Keyboard is appeared
当我点击 EditText
键入一些文本时,在我的程序的屏幕底部有一个 LinearLayout
包括一个 EditText
,键盘出现并且 EditText
高度缩水了,看不到我写的EditText
.
我对此进行了搜索,发现可能与 AndroidManifest.xml
文件有关。所以我将这一行添加到文件中:
android:windowSoftInputMode="adjustPan"
但是在我将这段代码添加到清单中后,这并没有像我想要的那样工作 EditText
放在键盘后面。
最后我想知道有什么方法可以防止在显示键盘时调整视图大小?
我的ActivityXML代码:
<android.support.constraint.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"
android:fitsSystemWindows="false">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="10"
app:layout_constraintTop_toTopOf="parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/msgView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
android:background="@drawable/sssaaa">
</android.support.v7.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:weightSum="10">
<EditText
android:id="@+id/txt_message"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="8.8"
android:background="@drawable/rounded_corner"
android:hint="@string/hint"
android:inputType="text"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="#000000" />
<Button
android:id="@+id/btn_send"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_weight="1"
android:background="@drawable/circular_button"
android:textColor="#000000"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
试试这个:
android:windowSoftInputMode="stateVisible|adjustNothing"
我找到了解决方法,因为您使用的是 Constraint Layout
,我将两个 Linear Layout
、RecyclerView
和发送消息字段分开。
由于 EditText
将始终在屏幕上并且 RecyclerView
已经包含一个 ScrollView 它们可能会在屏幕上竞争,因此 RecyclerView
不需要占据整个屏幕。
<android.support.constraint.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"
android:fitsSystemWindows="false">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout">
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:weightSum="0"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintTop_toTopOf="parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/msgView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:weightSum="10">
<EditText
android:id="@+id/txt_message"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="8.8"
android:inputType="text"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="#000000" />
<Button
android:id="@+id/btn_send"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_weight="1"
android:textColor="#000000"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
为了测试,我删除了包含可绘制对象的行,只需将它们放回去并 运行 代码。
请注意,我将 EditText
的父级 Linear Layout
的高度更改为 50dp
当我点击 EditText
键入一些文本时,在我的程序的屏幕底部有一个 LinearLayout
包括一个 EditText
,键盘出现并且 EditText
高度缩水了,看不到我写的EditText
.
我对此进行了搜索,发现可能与 AndroidManifest.xml
文件有关。所以我将这一行添加到文件中:
android:windowSoftInputMode="adjustPan"
但是在我将这段代码添加到清单中后,这并没有像我想要的那样工作 EditText
放在键盘后面。
最后我想知道有什么方法可以防止在显示键盘时调整视图大小?
我的ActivityXML代码:
<android.support.constraint.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"
android:fitsSystemWindows="false">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="10"
app:layout_constraintTop_toTopOf="parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/msgView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
android:background="@drawable/sssaaa">
</android.support.v7.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:weightSum="10">
<EditText
android:id="@+id/txt_message"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="8.8"
android:background="@drawable/rounded_corner"
android:hint="@string/hint"
android:inputType="text"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="#000000" />
<Button
android:id="@+id/btn_send"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_weight="1"
android:background="@drawable/circular_button"
android:textColor="#000000"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
试试这个:
android:windowSoftInputMode="stateVisible|adjustNothing"
我找到了解决方法,因为您使用的是 Constraint Layout
,我将两个 Linear Layout
、RecyclerView
和发送消息字段分开。
由于 EditText
将始终在屏幕上并且 RecyclerView
已经包含一个 ScrollView 它们可能会在屏幕上竞争,因此 RecyclerView
不需要占据整个屏幕。
<android.support.constraint.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"
android:fitsSystemWindows="false">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout">
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:weightSum="0"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintTop_toTopOf="parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/msgView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:weightSum="10">
<EditText
android:id="@+id/txt_message"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="8.8"
android:inputType="text"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="#000000" />
<Button
android:id="@+id/btn_send"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_weight="1"
android:textColor="#000000"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
为了测试,我删除了包含可绘制对象的行,只需将它们放回去并 运行 代码。
请注意,我将 EditText
的父级 Linear Layout
的高度更改为 50dp