Android 键盘只出现一次,但当我删除 ListView 时键盘工作正常
Android keyboard only shows up once, but works perfectly when I remove the ListView
当前行为
使用下面的 xml 布局,EditText 的 android 键盘会在 activity 启动时立即显示。如果我退出键盘,触摸 EditText 不会使键盘恢复原状。
期望的行为
当我注释掉下面的 ListView 时,一切正常。 android 键盘不会立即为 EditText 弹出,而是仅在我按下它时弹出。我还可以通过触摸 EditText 来恢复键盘。
问题
- 为什么我有 ListView 时会出现意外行为?
- 如何保持 ListView 和所需的行为?
旁注
在这两种情况下,我都注释掉了处理 ListView 的所有 Java 代码,因此这不是编程问题。
当我单击后退按钮,然后返回此 activity 时,键盘再次弹出(当 ListView 被注释掉时)。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.mywebsite.myproject.PrivateChat" >
<RelativeLayout
android:id="@+id/form"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:orientation="vertical" >
<EditText
android:id="@+id/message_input_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="#333333"
android:hint="Type a message..."
android:textColorHint="#FFFFFF"
android:inputType="text"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:textColor="#FFFFFF"
android:textSize="26sp" />
</RelativeLayout>
<ListView
android:id="@+id/private_chat_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
我只用了两行xml.
就修复了
我将这一行添加到 AndroidManifest.xml
中的 activity
:
android:windowSoftInputMode="stateAlwaysHidden"
我将这一行添加到 ListView:
android:layout_above="@id/form"
为什么这样有效
我感觉 ListViews 自动调出软键盘存在错误。添加第一行 xml 时,它阻止了键盘自动弹出。根据文档,所有这一切都是 The soft keyboard is always hidden when the activity's main window has input focus.
换句话说,如果主要 window 具有焦点,则此行可能有效的唯一方法,因此它很可能是 ListViews 的错误。对不起,我没有更具体的解释。
第二行很直观。 ListView 占据了整个屏幕,因为我将其高度设置为 match_parent
。因此它覆盖了 EditText,这就是为什么我不能再次按下 EditText 来恢复键盘。为了阻止 ListView 与 EditText 重叠,我只是将 ListView 锚定在 EditText 上方(远高于包含 EditText 的 RelativeLayout 但这不是重点)。
当前行为
使用下面的 xml 布局,EditText 的 android 键盘会在 activity 启动时立即显示。如果我退出键盘,触摸 EditText 不会使键盘恢复原状。
期望的行为
当我注释掉下面的 ListView 时,一切正常。 android 键盘不会立即为 EditText 弹出,而是仅在我按下它时弹出。我还可以通过触摸 EditText 来恢复键盘。
问题
- 为什么我有 ListView 时会出现意外行为?
- 如何保持 ListView 和所需的行为?
旁注
在这两种情况下,我都注释掉了处理 ListView 的所有 Java 代码,因此这不是编程问题。 当我单击后退按钮,然后返回此 activity 时,键盘再次弹出(当 ListView 被注释掉时)。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.mywebsite.myproject.PrivateChat" >
<RelativeLayout
android:id="@+id/form"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:orientation="vertical" >
<EditText
android:id="@+id/message_input_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="#333333"
android:hint="Type a message..."
android:textColorHint="#FFFFFF"
android:inputType="text"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:textColor="#FFFFFF"
android:textSize="26sp" />
</RelativeLayout>
<ListView
android:id="@+id/private_chat_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
我只用了两行xml.
就修复了我将这一行添加到 AndroidManifest.xml
中的 activity
:
android:windowSoftInputMode="stateAlwaysHidden"
我将这一行添加到 ListView:
android:layout_above="@id/form"
为什么这样有效
我感觉 ListViews 自动调出软键盘存在错误。添加第一行 xml 时,它阻止了键盘自动弹出。根据文档,所有这一切都是 The soft keyboard is always hidden when the activity's main window has input focus.
换句话说,如果主要 window 具有焦点,则此行可能有效的唯一方法,因此它很可能是 ListViews 的错误。对不起,我没有更具体的解释。
第二行很直观。 ListView 占据了整个屏幕,因为我将其高度设置为 match_parent
。因此它覆盖了 EditText,这就是为什么我不能再次按下 EditText 来恢复键盘。为了阻止 ListView 与 EditText 重叠,我只是将 ListView 锚定在 EditText 上方(远高于包含 EditText 的 RelativeLayout 但这不是重点)。