EditText не принимает цифры в качестве входных данных

В моем фрагменте есть два EditTexts. Для обоих из них android:inputType установлено значение numberSigned|numberDecimal, так как я хочу вводить через них только десятичные числа, которые также могут быть подписаны.

Проблема в том, что если я полностью удалю существующее содержимое EditTexts, они просто не примут цифры в качестве входных данных, они примут только такие знаки, как - (отрицательный знак) или . (десятичная точка). Таким образом, единственный случай, когда текст в них можно изменить, — это если цифра там уже присутствует, и мы добавляем новую цифру/символ.

Вот небольшая демонстрация проблемы, с которой я столкнулся: -

Я рассмотрел эти похожие проблемы: -

  1. EditText не принимает цифры в качестве входных данных (описывает ту же проблему, с которой я столкнулся)
  2. EditText не принимает ввод цифр

Однако у меня нет какого-либо макета/элемента-обертки, который реализует какой-либо метод, который может использовать событие ENTER (например, setOnKeyListener или dispatchKeyEvent). Вот файл макета, который содержит эти EditTexts и включен в основной файл макета фрагмента:

<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@drawable/rounded_custom_border">

<io.pslab.others.FloatSeekBar
    android:id = "@+id/seekbar_vertical_offset"
    android:layout_width = "@dimen/dimen_zero_dp"
    android:layout_height = "wrap_content"
    app:layout_constraintBottom_toBottomOf = "@+id/spinner_channel_select_vertical_offset"
    app:layout_constraintEnd_toStartOf = "@+id/guideline"
    app:layout_constraintStart_toEndOf = "@+id/spinner_channel_select_vertical_offset"
    app:layout_constraintTop_toTopOf = "parent" />

<io.pslab.others.FloatSeekBar
    android:id = "@+id/seekbar_horizontal_offset"
    android:layout_width = "@dimen/dimen_zero_dp"
    android:layout_height = "wrap_content"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintEnd_toStartOf = "@+id/guideline"
    app:layout_constraintStart_toEndOf = "@+id/spinner_channel_select_horizontal_offset"
    app:layout_constraintTop_toTopOf = "@+id/spinner_channel_select_horizontal_offset" />

<Spinner
    android:id = "@+id/spinner_channel_select_vertical_offset"
    android:layout_width = "wrap_content"
    android:layout_height = "@dimen/osc_spinner_height"
    android:layout_marginStart = "@dimen/osc_cb_margin"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toTopOf = "parent" />

<TextView
    android:id = "@+id/textview_vertical_offset_unit"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_marginEnd = "@dimen/osc_cb_margin"
    android:text = "@string/unit_volts"
    app:layout_constraintBottom_toBottomOf = "@+id/spinner_channel_select_vertical_offset"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintTop_toTopOf = "parent" />

<Spinner
    android:id = "@+id/spinner_channel_select_horizontal_offset"
    android:layout_width = "wrap_content"
    android:layout_height = "@dimen/osc_spinner_height"
    android:layout_marginStart = "@dimen/osc_cb_margin"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintStart_toStartOf = "parent" />

<TextView
    android:id = "@+id/textview_horizontal_offset_unit"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_marginEnd = "@dimen/osc_cb_margin"
    android:text = "@string/unit_milliseconds"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintTop_toTopOf = "@+id/spinner_channel_select_horizontal_offset" />

<androidx.constraintlayout.widget.Guideline
    android:id = "@+id/guideline"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:orientation = "vertical"
    app:layout_constraintGuide_percent = "0.8" />

<EditText
    android:id = "@+id/edittext_vertical_offset"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:background = "@null"
    android:inputType = "numberSigned|numberDecimal"
    android:imeOptions = "actionDone"
    android:textAlignment = "viewEnd"
    android:textAppearance = "@android:style/TextAppearance.Material.Small"
    app:layout_constraintBottom_toBottomOf = "@+id/spinner_channel_select_vertical_offset"
    app:layout_constraintEnd_toStartOf = "@+id/textview_vertical_offset_unit"
    app:layout_constraintTop_toTopOf = "parent" />

<EditText
    android:id = "@+id/edittext_horizontal_offset"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:background = "@null"
    android:inputType = "numberSigned|numberDecimal"
    android:imeOptions = "actionDone"
    android:textAlignment = "viewEnd"
    android:textAppearance = "@android:style/TextAppearance.Material.Small"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintEnd_toStartOf = "@+id/textview_horizontal_offset_unit"
    app:layout_constraintTop_toTopOf = "@+id/spinner_channel_select_horizontal_offset" />

</androidx.constraintlayout.widget.ConstraintLayout>

Родительская активность этого фрагмента расширяет AppCompatActivity и реализует View.OnClickListener. Кто-нибудь знает, что может использовать событие ENTER и вызывать эту проблему?

Редактировать:-

Я тестировал на двух устройствах Android. Это прекрасно работает на устройстве под управлением Android 8.1. Однако на устройстве с Android 10 возникает описанная выше проблема. Кроме того, эта проблема возникает только с EditTexts, помещенными внутри фрагментов. Те, которые размещены непосредственно в макетах действий, работают абсолютно нормально.

Привет, просто используйте android:inputType = "numberDecimal", это поможет вам.

Ankit Tale 13.06.2024 08:06

@AnkitTale Спасибо за ваше предложение. Я это уже пробовал, мою проблему не решает. Кроме того, я не могу это использовать, поскольку я также обязан принимать отрицательные числа в качестве входных данных.

A_Singh7 13.06.2024 08:08

Можете ли вы попробовать одну вещь, возможно, какое-то время удерживайте отрицательную клавишу в качестве ввода. Спасибо

Ankit Tale 13.06.2024 08:11

@AnkitTale Еще раз спасибо. Тоже не работает. Кроме того, мы не можем ожидать, что конечные пользователи будут делать то же самое при использовании приложения.

A_Singh7 13.06.2024 08:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, проблема заключалась в том, что я установил android:layout_width на wrap_content для обоих EditTexts.

Когда весь существующий контент был удален, ширина EditTexts уменьшилась до 0, и, следовательно, возникла проблема. Все еще не объясняет, почему .(десятичная точка) было принято в качестве входных данных, но установка android:layout_width на какое-то фиксированное значение вместо wrap_content сработала для меня. Альтернативно, установка атрибута android:minWidth также может помочь.

Другие вопросы по теме