在安卓系统中编辑文本焦点的修改

4
在我的应用程序中,我有一个如下所示的编辑文本框。
EditText1   EditText2
EditText3   EditText4
EditText5   EditText6

在 XML 中,我声明了 android:imeOptions="actionNext",并且我也写了:
          editText1.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                // TODO Auto-generated method stub
                 if (actionId == EditorInfo.IME_ACTION_DONE ||   actionId == EditorInfo.IME_ACTION_NEXT) {
                     editText2.requestFocus();

                  return false;
                  }
                return false;
            }
         });

现在,在EditText 1中的虚拟键盘中,如果我按下“Next”,焦点就会转移到EditText 3而不是EditText 2等。

如何使焦点转移到EditText 2而不是EditText 3呢?对于我的应用程序用户,他只会按“下一个”或“完成”,不会使用轨迹球。

3个回答

4
你可以尝试在EditText中添加android:nextFocusDown属性。这可以帮助提高用户输入的效率。

1
我将下一个焦点放下,但没有用。 - Kiran_b
你能否发布一下你添加了 android:nextFocusDown 的代码?只需要几个 EditText 的 xml 代码即可。 - Arnab Chakraborty
在代码中添加了下一个焦点的ID后,它正常工作了。感谢您的支持。 - Kiran_b

1

我刚刚使用以下布局测试了您的代码,结果符合预期。(预期结果是:在虚拟键盘上点击“下一个”按钮后,焦点会传递到editText2)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_gravity="center"
android:padding="15dip">
<LinearLayout android:orientation="vertical"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:layout_gravity="center" android:paddingLeft="20dip"
    android:paddingRight="20dip">
    <TableLayout android:layout_height="wrap_content"
        android:layout_width="wrap_content" android:layout_gravity="center"
        android:stretchColumns="*">

        <TableRow>
            <EditText android:id="@+id/edt1" />
            <EditText android:id="@+id/edt2" />
        </TableRow>

        <TableRow>
            <EditText android:id="@+id/edt3" />
            <EditText android:id="@+id/edt4" />
        </TableRow>

        <TableRow>
            <EditText android:id="@+id/edt5" />
            <EditText android:id="@+id/edt6" />
        </TableRow>


    </TableLayout>
</LinearLayout>

这里也有源代码

package com.stackoverflow.test;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.inputmethod.EditorInfo;
    import android.widget.EditText;
    import android.widget.TextView;

public class TestEditTextFocusActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    EditText editText1 = (EditText)findViewById(R.id.edt1);
    final EditText editText2 = (EditText)findViewById(R.id.edt2);

    editText1.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId,
                KeyEvent event) {
          if (actionId == EditorInfo.IME_ACTION_DONE ||   
                  actionId == EditorInfo.IME_ACTION_NEXT) {
           editText2.requestFocus();
            return false;
          }

            return false;
        }
   });
}

}


我正在使用Eclipse Indigo和提供的模拟器。目标是Android 2.2(API级别8)。所以,如果你创建一个新项目,只是复制粘贴代码,它对你来说不起作用? - hovanessyan

0
 ed1.setOnEditorActionListener(new EditText.OnEditorActionListener() {
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    // TODO Auto-generated method stub
                     if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT) {
                        ed1.setNextFocusDownId(R.id.ed2);

                      return false;
                      }
                    return false;
                }
             });

写完上述代码后,我的问题得到了解决。感谢大家的答案和支持。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接