EditText 不接受数字作为输入

问题描述 投票:0回答:1

我的片段中有两个 EditTexts。它们都将

android:inputType
设置为
numberSigned|numberDecimal
,因为我希望通过它们仅输入十进制数字,也可以带符号。

问题是,如果我完全删除EditTexts的现有内容,它们根本不接受数字作为输入,它们只接受诸如

-
(负号)或
.
(小数点)之类的符号。因此,基本上,其中的文本可以更改的唯一情况是其中已经存在数字,并且我们附加一些新的数字/符号。

这里是我面临的问题的一个小演示:- Issue Demo

我看过这些类似的问题:-

  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>

该片段的父 Activity 扩展了

AppCompatActivity
并实现了
View.OnClickListener
。 有谁知道什么可能会消耗 ENTER 事件并导致此问题?

编辑:-

我在两台 Android 设备上进行了测试。这在运行 Android 8.1 的设备上运行得非常好。然而,在Android 10的设备上,就会出现上述问题。 此外,此问题仅出现在 Fragments 内的 EditTexts 中。直接放置在活动布局中的效果绝对很好。

java android android-fragments android-edittext
1个回答
0
投票

好的,所以问题是我已将

EditTexts
android:layout_width
设置为 wrap_content

当所有现有内容被删除时,EditTexts缩小为0宽度,因此出现了问题。 仍然没有解释为什么

.
(小数点)被接受为输入,但是将
android:layout_width
设置为某个固定值而不是
wrap_content
对我来说很有效。或者,设置
android:minWidth
属性也有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.