当前行为
使用下面的xml布局,EditText的android键盘会在活动开始时立即显示。如果我退出键盘,触摸EditText不会使键盘恢复正常。
所需行为
当我在下面注释掉ListView时,一切都很完美。 Android键盘不会立即弹出EditText,而只是当我按下它时。我也可以通过触摸EditText将键盘拉回来。
问题
附注
在这两种情况下,我都注释掉了所有处理ListView的Java代码,因此这不是一个编程问题。 当我单击后退按钮,然后返回此活动时,键盘会再次弹出(当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>
答案 0 :(得分:0)
我只用2行xml修复它。
我已将此行添加到activity
中的AndroidManifest.xml
:
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.
换句话说,这条线可能有效的唯一方法是主窗口是否有焦点,所以很可能是ListViews的一个错误。对不起,我没有更具体的解释。
第二行很直观。自从我将其高度设置为match_parent
后,ListView占据了整个屏幕。因此它覆盖了EditText,这就是我无法再次按EditText来恢复键盘的原因。为了阻止ListView与EditText重叠,我只是将ListView锚定在EditText上方(远远高于包含EditText的RelativeLayout,但这不是重点)。