В моем фрагменте есть два EditTexts. Для обоих из них android:inputType установлено значение numberSigned|numberDecimal, так как я хочу вводить через них только десятичные числа, которые также могут быть подписаны.
Проблема в том, что если я полностью удалю существующее содержимое EditTexts, они просто не примут цифры в качестве входных данных, они примут только такие знаки, как - (отрицательный знак) или . (десятичная точка). Таким образом, единственный случай, когда текст в них можно изменить, — это если цифра там уже присутствует, и мы добавляем новую цифру/символ.
Вот небольшая демонстрация проблемы, с которой я столкнулся: -
Я рассмотрел эти похожие проблемы: -
Однако у меня нет какого-либо макета/элемента-обертки, который реализует какой-либо метод, который может использовать событие 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, помещенными внутри фрагментов. Те, которые размещены непосредственно в макетах действий, работают абсолютно нормально.
@AnkitTale Спасибо за ваше предложение. Я это уже пробовал, мою проблему не решает. Кроме того, я не могу это использовать, поскольку я также обязан принимать отрицательные числа в качестве входных данных.
Можете ли вы попробовать одну вещь, возможно, какое-то время удерживайте отрицательную клавишу в качестве ввода. Спасибо
@AnkitTale Еще раз спасибо. Тоже не работает. Кроме того, мы не можем ожидать, что конечные пользователи будут делать то же самое при использовании приложения.




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