到目前为止,我已经花了大约6个小时的时间,除了路障之外什么都没打.一般的前提是a中有一些行ListView(无论是由适配器生成,还是作为标题视图添加)包含一个EditText小部件和一个Button.我想要做的就是能够使用jogball /箭头,将选择器导航到正常的单个项目,但是当我到达特定行时 - 即使我必须明确地识别行 - 它具有可聚焦孩子,我希望那个孩子采取焦点而不是用选择器指示位置.
我已经尝试了很多可能性,到目前为止还没有运气.
布局:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)
标题视图:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
Run Code Online (Sandbox Code Playgroud)
假设适配器中还有其他项目,使用箭头键将按预期在列表中上/下移动选择; 但是当到达标题行时,它也会与选择器一起显示,并且无法专注于EditText使用jogball.注意:点击它EditText 会将焦点集中在那一点,但是它依赖于触摸屏,这不是必需的.
ListView在这方面显然有两种模式:
1 setItemsCanFocus(true).:从不显示选择器,但EditText使用箭头时可以获得焦点.焦点搜索算法难以预测,并且没有选择哪个项目的视觉反馈(在任何行上:具有可聚焦儿童或不具有可聚焦儿童),这两者都可以给用户带来意想不到的体验.
2 setItemsCanFocus(false).:选择器始终以非触摸模式绘制,并且EditText永远无法获得焦点 - 即使您点击它也是如此.
更糟糕的是,调用editTextView.requestFocus()返回true,但事实上并没有给EditText带来焦点.
我想象的基本上是1和2的混合,而不是列表设置,如果所有项目都是可聚焦的,我想为列表中的单个项目设置可聚焦性,以便选择器从选择无缝转换不可聚焦项目的整行,以及遍历包含可聚焦子项的项目的焦点树.
任何接受者?
我有一个ListView地方,我在一个单独的XML文件中定义了每个项目的布局.在这个文件中,我包含了一个RatingBar和一个EditText.
我已经以编程方式创建了7-8个项目ListView.当我滚动它们时,它似乎是非常错误的.这里有些例子:
如果我将焦点设置到EditText第一行然后向下滚动,则其他行中的ListView随机EditTexts将具有焦点.似乎是EditText在焦点消失后的下一个消失得到了焦点.也许这是故意的,但是,作为一个用户,它似乎很奇怪.
如果我将焦点设置为a EditText,接收虚拟键盘,键入内容,然后单击虚拟键盘上的"完成"按钮,EditText一旦虚拟键盘消失,它将清空.
有时,当我点击一个EditText,接收一个虚拟键盘并开始输入字母时,一旦我输入它们,这些字母就会消失.
当我点击一个EditText,虚拟键盘显示自己,但EditText失去焦点,我必须EditText再次点击.
尽管我已经设置了RatingBar到focusable="false",如果我将我的滚轮,它仍然抓住重点.
我的一个问题是,当我在虚拟键盘中键入一个字符时,所有可见的列表项都会重新绘制(并且由于文本EditText被设置为某些数据,这是空的,它会被清除.我不明白为什么Android会每次键入一个字符时都决定重新绘制列表.
这是我用来绘制它们的XML.它们是白色气泡,带有灰色边框,还有一些文字,一个RatingBar和一个EditText内部:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="10dip"
android:paddingBottom="10dip"
android:paddingLeft="15dip"
android:paddingRight="15dip"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dip"
android:background="@drawable/shape_outer">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dip"
android:background="@drawable/shape_inner">
<TextView
android:id="@+id/rating_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/dark_gray"
android:textStyle="bold"
android:layout_marginBottom="10dip" />
<RatingBar …Run Code Online (Sandbox Code Playgroud) 在android中,我们如何让设备键盘在应用程序中始终可见?顶部显示应用程序要呈现的内容,底部显示键盘.
我一直在设计一个包含可扩展列表的应用程序.在每个列表的末尾,空白EditText已准备好接收注释.我有以下问题; 当我触摸时EditText,屏幕稍微调整大小(不是问题因为调整大小并不总是发生,这取决于我的布局和EditText列表中的位置)并且出现软键盘.然而,在这些事件中,EditText失去焦点并且不会重新获得它.这是非常不方便的,因为没有焦点,尽管键盘可用,键盘输入无法到达EditText.一旦我再次触摸它,EditText行为就像预期的那样.
它变得更加陌生.键盘仍然显示,我可以触摸不同EditText的相同的情况; 它失去了焦点.然而,一旦我通过最初失去焦点,我可以在之前触摸的EditTexts 之间自由移动而没有任何焦点相关的问题.只有当我隐藏软键盘时,"状态"才会消失,我需要点击EditText两次才能编辑它们.
以下是我的代码的摘录.一,empty_comment.xml:
<?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/blank_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textCapSentences"
android:imeOptions="actionDone"
android:hint="@string/hint"
android:layout_marginLeft="30dip" >
</EditText>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这里是我使用相关布局的片段的摘录:
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_empty, null);
final EditText editText = (EditText) convertView.findViewById(R.id.blank_box);
editText.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if(actionId == EditorInfo.IME_ACTION_DONE)
{
// Unrelated code
}
return true; …Run Code Online (Sandbox Code Playgroud) 我有一个ListView与EditTexts作为项目.
我已经尝试
在清单中设置两个android:windowSoftInputMode="adjustPan"和"adjustResize"标志,我也尝试添加"alwaysvisible"标志,它也没有帮助.
但是当键盘盘旋在文本上并且我开始输入编辑文本框时,没有看到孤独的,它只会在第一次获得焦点时弹出.
编辑:我已经在4.3上测试了它,因为它应该工作,编辑文本一直可见,但在4.2.1/4.2.2它不起作用.
我有一个ListView与包含ImageView和EditText的项目.当我触摸EditText时,它会获得焦点,出现虚拟键盘,当键盘上方出现建议时,EditText会失去焦点(并且建议会消失).
这发生在Android 2.3(模拟器和HTC Hero)上,并在另一个非2.3设备(可能是Galaxy S 2.2)上报告.拥有2.2和2.1罗姆斯的HTC Hero没有这个问题......
任何想法如何摆脱这种行为?
编辑:
如果我重写ListView的onSizeChanged而不调用super.onSizeChanged,焦点不会丢失(但是引入了很多其他错误......)