如何在edittext + listview布局中隐藏键盘

时间:2012-10-08 17:49:56

标签: android listview keyboard android-edittext hide

我有一个由ListView(从AsynTask加载)和EditText组成的LinearLayout(所以我可以过滤该列表)。这是代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Filtrar por nombre..." >

    </EditText>

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

问题是,当活动开始时,键盘会显示出来,我只想在单击EditText进行搜索时显示它。

我尝试了几种方法,例如在清单中编写以下内容

android:windowSoftInputMode="stateHidden"

并将其包含在课堂

InputMethodManager iMM = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
iMM.hideSoftInputFromWindow(editText.getWindowToken(), 0);

我唯一能做到的就是不显示键盘但不显示列表中的加载内容(只是EditText和屏幕的其余部分为黑色),一旦我点击EditText,它们就会出现键盘和listView的东西。

对此有任何可行的解决方案吗?

编辑:

我已经尝试了以下解决方案(感谢@Sush,@ boztalay和@Agata Sworowska),但没有人能做到这一点。

- 放在我的布局中:

android:focusable="true"
android:focusableInTouchMode="true"

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

- 放在我的onCreate()方法中:

ListView listView = findViewById(R.id.list);
listView.setFocusableInTouchMode(true);
listView.requestFocus();

其他任何可能性?

新编辑:

我注意到当它没有专注于EditText时,listView不会加载,直到我重新聚焦EditText,如果它正在等待它,我喜欢它。我试图在加载ListView的代码之后设置EditText,但问题仍然存在。

4 个答案:

答案 0 :(得分:1)

这听起来像焦点问题。发生的事情是,当应用程序启动时,EditText会获得焦点,键盘会弹出。您应该尝试使ListView获得焦点。这样,只有当用户点击它时才给出EditText焦点,键盘才会弹出。

在Java中,你应该得到一个ListView实例,然后调用几个函数:

ListView listView = findViewById(R.id.list);
listView.setFocusableInTouchMode(true);
listView.requestFocus();

如果你把它放在你的onCreate()中,那么焦点将放在ListView上,并且在用户点击EditText之前它们的键盘不会出现。

有关详细信息,请参阅this SO question

答案 1 :(得分:0)

您可以在LinearLayout中添加以下两个属性。

android:focusable="true"
android:focusableInTouchMode="true"

答案 2 :(得分:0)

尝试添加包含EditText的布局:

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

我希望它有所帮助。

答案 3 :(得分:0)

http://www.mysamplecode.com/2012/02/android-edittext-hide-soft-keyboard.html

这是我在这里找到问题的解决方案。不明白为什么listivew应该这样做,但解决方法有帮助。