当前位置: 首页 > 知识库问答 >
问题:

按下软键盘上的下一个输入法按钮时跳过禁用的编辑文本

芮博厚
2023-03-14

我有一个线性布局(LinearLayout),其中有几个编辑文本(EditText),它们都是通过编程方式创建的(不是用XML布局),尤其是没有id。

当我在其中一个EditText中键入,并且下一个(各自对焦)被禁用,并且我按下键盘上的Next IME按钮时,焦点前进到禁用的EditText,但我不能在其中键入任何内容。

我所期望的是焦点前进到下一个启用的编辑文本。除了通过EditText禁用EditText之外,我还尝试了。setEnabled(false),通过编辑文本禁用其聚焦性。setFocusable(false)和编辑文本。setFocusableInTouchMode(false),并设置输入类型为NULL,但无效。

有什么提示吗?

感谢;)

共有3个答案

仲孙华奥
2023-03-14

看见

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。

如果您能够找出如何关注下一个文本视图,您可以向每个文本视图添加一个编辑动作监听器,如果它被禁用,则让它将焦点传递给下一个。

孟福
2023-03-14

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

editText.setEnabled(false);
editText.setFocusable(false);
左丘繁
2023-03-14

通过检查键盘如何从这篇博文中找到下一个可聚焦的,并通过子类化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;
    }

}

更多细节:

ViewGroupfocusSearch()的实现使用FocusFinder,该FocusFinder调用addFocusables()。视图组的实现测试可见性,而视图的实现测试聚焦性。这两个测试都不是针对启用状态的,这就是为什么我在上面的MyEditText中添加了这个测试。

 类似资料:
  • 这是我的代码: 我所要做的就是使esc按钮与backspace按钮完全相同。所以我想删除

  • 问题内容: 我有一个“保存”按钮,我想与软键盘一起向上推。因此,当用户单击我的布局中的EditText时,按钮必须保持在键盘上方。现在,该按钮将隐藏在键盘下方。你怎么做到这一点? 提前致谢! 问题答案: 您需要将键盘的输入模式设置为。您可以这样做,将以下行添加到清单中您的活动属性中: 这是在活动中添加的属性的示例:

  • 我有一个编辑文本,我想自己处理输入,所以我不想在我点击它时(或者当选择改变、焦点改变、长时间点击等)软键盘出现。但是,我仍然希望能够选择文本、更改光标位置、复制/过去等。 我曾尝试将Android系统:windowSoftInputMode=“stateAllwayshidden”放入清单中,但似乎效果不大。我还尝试添加以下内容 这会禁用键盘,但也会阻止光标工作。 目前,我基本上是在尝试为键盘可能

  • 我正在尝试调整图像按钮正下方的软键盘,但它覆盖了图像按钮,使其无法单击。当用户单击编辑文本时,我希望按钮位于软键盘的正上方。我尝试过使用,但它似乎不起作用。 下面是我的布局。xml文件 在AndroidManifest中。我拥有的xml文件

  • 我以编程方式生成了许多按钮(一些按钮用于增加值,而另一些按钮用于减少值),当它们调整的值达到最大值或最小值时,我会禁用这些按钮。(即,当达到最大值时,“增加”按钮被禁用,而当达到最小值时,“减少”按钮被禁用。)除了禁用,我还将按钮状态设置为“按下”,以直观地指示已达到极限值,并且按钮不再工作。 我的按钮onClickListener的'增加'按钮看起来像这样: ClickListeners上相应的

  • 我在做计算器。所以我制作了自己的带有数字和函数的