7

我有LinearLayout几个EditText's,所有这些都是以编程方式创建的(不是使用 XML 布局),特别是没有 ID。

当我输入其中一个时EditText,下一个(相对于焦点)被禁用,并且我按下键盘上的 Next IME 按钮,焦点前进到 disabled EditText,但我无法输入任何内容它。

我所期待的是专注于推进到下一个启用 EditText的. 除了通过禁用禁用之外,我还尝试EditText通过andedittext.setEnabled(false)禁用其可聚焦性,并设置输入类型,但无济于事。edittext.setFocusable(false)edittext.setFocusableInTouchMode(false)TYPE_NULL

有什么提示吗?

谢谢 ;)

4

3 回答 3

12

通过检查此博客文章中的键盘如何找到下一个焦点并通过子类化来解决EditText

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;

public class MyEditText extends EditText {

    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyEditText(Context context) {
        super(context);
    }

    @Override
    public View focusSearch(int direction) {
        View v = super.focusSearch(direction);
        if (v != null) {
            if (v.isEnabled()) {
                return v;
            } else {
                // keep searching
                return v.focusSearch(direction);
            }
        }
        return v;
    }

}

更多细节:

ViewGroup的实现focusSearch()使用FocusFinder,它调用addFocusables(). 的ViewGroup实现测试可见性,而View实现测试可聚焦性。没有测试启用状态,这就是我在MyEditText上面添加这个测试的原因。

于 2013-08-24T09:24:54.427 回答
5

我解决了将可聚焦属性设置为false的问题,而不仅仅是启用的属性:

editText.setEnabled(false);
editText.setFocusable(false);
于 2019-04-15T09:27:14.690 回答
0

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

这是从http://developer.android.com/training/keyboard-input/style.html#Action 获取的。

如果你能弄清楚如何关注下一个TextView,你可以OnEditorActionListener给每个添加一个,TextView如果它被禁用,让它将焦点传递给下一个。

于 2013-08-24T03:10:40.830 回答