到目前为止,我已经在这方面花费了大约 6 个小时,除了遇到障碍之外什么也没遇到。一般前提是 ListView
中有一些行(无论是由适配器生成,还是作为标题 View 添加)包含一个 EditText
小部件和一个 按钮
。我想要做的就是能够使用旋转球/箭头,像平常一样将选择器导航到各个项目,但是当我到达特定行时(即使我必须明确识别该行),该行具有可聚焦的 child ,我希望该 child 获得焦点,而不是使用选择器指示位置。
我尝试了很多可能性,但到目前为止还没有成功。
布局:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
标题 View :
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
假设适配器中有其他项目,使用箭头键将按预期在列表中向上/向下移动选择;但是当到达标题行时,它也会与选择器一起显示,并且无法使用慢球将焦点集中到 EditText
上。注意:点击EditText
会将其聚焦在该点,但是这依赖于触摸屏,这不应该是必需的。
ListView
在这方面显然有两种模式:
1. setItemsCanFocus(true)
:选择器永远不会显示,但 EditText
在使用箭头时可以获得焦点。焦点搜索算法很难预测,并且没有关于选择哪个项目的视觉反馈(在任何行上:是否有可聚焦的子项),这两者都会给用户带来意想不到的体验。
2. setItemsCanFocus(false)
:选择器始终以非触摸模式绘制,并且 EditText
永远无法获得焦点 - 即使您点击它。
更糟糕的是,调用 editTextView.requestFocus()
返回 true,但实际上并没有给予 EditText 焦点。
我设想的基本上是 1 和 2 的混合,其中不是列表设置如果所有项目是否可聚焦,我想为单个<设置可聚焦性/em> 列表中的项目,以便选择器从选择不可聚焦项目的整行无缝过渡到遍历焦点树以查找包含可聚焦子项的项目。
有人接受吗?
最佳答案
这对我有帮助。
在您的 list 中:
<activity android:name= ".yourActivity" android:windowSoftInputMode="adjustPan"/>
关于android - ListView 内可聚焦的 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58535740/