我有一个由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,但问题仍然存在。
答案 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应该这样做,但解决方法有帮助。