将焦点更改为 EditText Android

Posted

技术标签:

【中文标题】将焦点更改为 EditText Android【英文标题】:Change Focus to EditText Android 【发布时间】:2011-07-22 18:07:56 【问题描述】:

我的 Activity 中有 2 个 EditText,并将 maxLength 设置为 5。

现在我想将焦点设置为editText2,如果editView1中达到5的长度...

我试过了:

editView1.setOnKeyListener(new OnKeyListener() 
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) 
        if(editView1.getText().length() == 5)
            editView2.requestFocus();
        return false;
    
);

但它不会工作..

【问题讨论】:

【参考方案1】:

这行得通

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

editText1.setOnKeyListener(new OnKeyListener() 

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) 
        if(editText1.getText().length() == 5)
            editText2.requestFocus();
        return false;
    
);

【讨论】:

所以我必须将我的 EditView 更改为 EditText 的?我会试试的,谢谢。 行不通...我认识到,如果我使用“退格”键,事件只会触发... 那是有线的。我在示例项目中尝试了该代码片段,并且完全按照您的要求进行了操作。在第 5 个键之后,它将焦点更改为另一个 EditText。也许您必须覆盖 OnKeyListener 中的其他方法之一。你试过了吗? Text 方法为 addTextChangedListener(new android.text.TextWatcher() );该对象具有三个方法onTextChanged,beforeTextChanged,afterTextChanged,我认为您需要使用afterTextChanged并将代码放在这里 if(editView1.getText().length() == 5) editView2.requestFocus(); @Prexx 我也有你的问题。 onKey 事件仅在我使用退格键时触发。你是怎么解决你的问题的?【参考方案2】:

Marc Juschkeits 的帖子对我来说几乎是完美的。

但在我的情况下,我必须测试 keyevent 是否是一个动作,因为我在 edittext 中有一个长度相同的标准文本。

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

editText1.setOnKeyListener(new View.OnKeyListener() 
        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) 
            if (keyEvent.getAction() == KeyEvent.ACTION_UP) 
                if (editText1.getText().length() == 5) 
                    editText2.requestFocus();
                
            
            return false;
        
    );

【讨论】:

【参考方案3】:

我认为请求焦点不适用于主线程。但我不确定。 这对我有用,

_edittext.post(new Runnable() 
      public void run() 
        
           _edittext.requestFocus();
        

);

【讨论】:

【参考方案4】:

EdName.setOnKeyListener(new OnKeyListener()

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) 
            System.out.println("Yes Bud");

            if(EdName.length()== 5)
            
                    EdBin.requestFocus();

            
                return false;


        
    );

【讨论】:

【参考方案5】:

在androidmanifest.xml文件的activity标签中添加如下代码:

android:windowSoftInputMode="stateHidden"

【讨论】:

以上是关于将焦点更改为 EditText Android的主要内容,如果未能解决你的问题,请参考以下文章

edittext.settext() 将键盘类型更改为默认值 [从 ?123 到 ABC]

将 android EditText 样式从矩形边框更改为下划线

以编程方式将 EditText 的输入类型从 PASSWORD 更改为 NORMAL,反之亦然

将android EditText样式从矩形边框更改为下划线

更改为多行后文本输入失去焦点

将焦点自动更改为 react native 中的下一个 TextInput