java - 分组编辑文本

标签 java android android-edittext

我想知道是否有一种方法可以将 EditText 分组,您只能在其中一组中遍历。

Diagram

问题是我依赖于到达第一组的末尾并使用 EditorInfo.IME_ACTION_DONE 来触发某个 Action 。

EditText 的内部组在 LinearLayout 中。

最佳答案

将文本框放在一个布局(线性或相对)中,只放置那些您想要组成一个组的 EditText。布局将作为组。将此添加到您的每个 Edittext xml--

 android:maxLines="1"

如果它不起作用,您可以处理焦点。

焦点处理 焦点移动基于在给定方向上找到最近邻居的算法。在极少数情况下,默认算法可能与开发人员的预期行为不匹配。

使用以下 XML 属性更改定向导航的默认行为:

android:nextFocusDown="@+id/.."  
android:nextFocusLeft="@+id/.."    
android:nextFocusRight="@+id/.."    
android:nextFocusUp="@+id/.."  

除了定向导航,您还可以使用标签导航。为此你需要使用

android:nextFocusForward="@+id/.."

要让特定 View 获得焦点,请调用

view.requestFocus()

要收听某些更改焦点事件,请使用 View.OnFocusChangeListener

键盘按钮

您可以使用 android:imeOptions 来处理键盘上的额外按钮。

您可以在与编辑器关联的 IME 中启用其他功能,以改进与您的应用程序的集成。这里的常量对应于 imeOptions 定义的那些。 imeOptions 的常量包括各种操作和标志,请参阅上面的链接了解它们的值。

值示例

下一步行动:

操作键执行“下一步”操作,将用户带到将接受文本的下一个字段。 Action 完成:

操作键执行“完成”操作,通常意味着没有更多的输入并且 IME 将关闭。

代码示例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="32dp"
    android:layout_marginTop="16dp"
    android:imeOptions="actionNext"
    android:singleLine="true"
    android:ems="10" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/editText1"
    android:layout_below="@+id/editText1"
    android:layout_marginTop="24dp"
    android:imeOptions="actionDone"
    android:singleLine="true"
    android:ems="10" />

</RelativeLayout>

如果您想收听 imeoptions 事件,请使用 TextView.OnEditorActionListener。

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

编辑: 对于动态编辑文本,您可以尝试..

EditText etCurrent;

在每个 EditText 上设置一个 OnTouchlistener:

valueET.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_DOWN) {

            if (etCurrent != null) {
                if (etCurrent.getId() != v.getId()) {

                    if (!check(etCurrent.getId())) {
                        etCurrent.setSelection(0,
                             etCurrent.getText().toString().length());
                        return true;
                    } else {
                        etCurrent = (EditText) v;
                    }
                }
            } else {
                etCurrent = (EditText) v;
            }
      }
    return false;
    }
});

关于java - 分组编辑文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40712423/

相关文章:

java - 了解 Hibernate 的条件#setMaxResults

c# - 使用字节访问位图内存信息

java - 如何从已实现的集合中获取随机元素?

android - 在 EditText 中快速滚动

android - 不带富文本格式的粘贴到 EditText

java - 在 Spring Data Rest 中自定义 alps 生成

android - Android设备上的单声道/立体声录音有什么区别

java - 在 Android 上使用 URL 会抛出 IOException : Malformed ipv6 address

android - 为edittext中的某些单词制作波浪形红色下划线

android - .android 文件夹中的 Firebase 错误没有 debug.keystore