3

我有一个由 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

4 回答 4

2

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

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

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

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

有关更多详细信息,请参阅此 SO 问题

于 2012-10-08T18:18:37.303 回答
1

您只需将以下两个属性添加到您的 LinearLayout。

android:focusable="true"
android:focusableInTouchMode="true"
于 2012-10-08T18:20:25.680 回答
1

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

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

于 2013-01-14T09:08:08.227 回答
1

尝试添加您的布局,其中包含 EditText:

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

我希望它有所帮助。

于 2012-10-08T19:34:01.753 回答