首页 > 解决方案 > 如何在三星 S8 等较旧的 Android 设备上自动转到下一个 EditText 而不会出现延迟

问题描述

我有 8 个编辑文本字段。每个字段用于 1 个号码(这是一个电话号码输入屏幕)。输入 1 个数字后,我希望我的光标自动移动到下一个编辑文本。

但是输入有延迟,导致用户体验不流畅。我都试过了:

onEditorAction(EditorInfo.IME_ACTION_NEXT)

和:

secondNumber?.requestFocus()

但没有区别。这是一个非常常见的屏幕,所以我认为应该有一个简单的解决方案?我不允许使用外部库。

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {

    _binding = FragmentFirstBinding.inflate(inflater, container, false)

    val views = arrayListOf(
        _binding?.firstNumber,
        _binding?.secondNumber,
        _binding?.thirdNumber,
        _binding?.fourthNumber,
        _binding?.fifthNumber,
        _binding?.sixthNumber,
        _binding?.seventhNumber,
        _binding?.eighthNumber
    )
    views.first()?.requestFocus()

    _binding?.firstNumber?.addTextChangedListener {
        _binding?.firstNumber?.onEditorAction(EditorInfo.IME_ACTION_NEXT)
        //_binding?.secondNumber?.requestFocus()
    }

    _binding?.secondNumber?.addTextChangedListener {
        _binding?.secondNumber?.onEditorAction(EditorInfo.IME_ACTION_NEXT)
        //_binding?.thirdNumber?.requestFocus()
    }

    _binding?.thirdNumber?.addTextChangedListener {
        _binding?.fourthNumber?.requestFocus()
    }

    _binding?.fourthNumber?.addTextChangedListener {
        _binding?.fifthNumber?.requestFocus()
    }

    _binding?.fifthNumber?.addTextChangedListener {
        _binding?.sixthNumber?.requestFocus()
    }

    _binding?.sixthNumber?.addTextChangedListener {
        _binding?.seventhNumber?.requestFocus()
    }

    _binding?.seventhNumber?.addTextChangedListener {
        _binding?.eighthNumber?.requestFocus()
    }

    _binding?.eighthNumber?.addTextChangedListener {
        Toast.makeText(context, "Reached last digit", Toast.LENGTH_SHORT).show()
    }

    return _binding?.root!!
}

我的编辑文本:

    <EditText
        android:id="@+id/first_number"
        android:layout_width="30dp"
        android:layout_height="40dp"
        android:layout_margin="8dp"
        android:focusable="true"
        android:imeOptions="actionNext"
        android:inputType="number"
        android:maxLength="1"
        android:maxLines="1"
        android:singleLine="true"
        android:textColor="@color/black" />

标签: androidkotlinandroid-edittext

解决方案


推荐阅读