Android键盘只显示一次,但在删除ListView时效果很好

时间:2015-02-15 03:53:35

标签: java android xml listview keyboard

当前行为

使用下面的xml布局,EditText的android键盘会在活动开始时立即显示。如果我退出键盘,触摸EditText不会使键盘恢复正常。

所需行为

当我在下面注释掉ListView时,一切都很完美。 Android键盘不会立即弹出EditText,而只是当我按下它时。我也可以通过触摸EditText将键盘拉回来。

问题

  1. 当我有ListView时,为什么会出现意外行为?
  2. 如何保持ListView和所需的行为?
  3. 附注

    在这两种情况下,我都注释掉了所有处理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>
    

1 个答案:

答案 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,但这不是重点)。