Примечание: Это просто дополнение для принятого ответа.
Это связано с Java модификаторами доступа .
Из Модификаторы доступа Java :
Модификатор доступа Java указывает, какие классы могут получить доступ к данному классу и его полям, конструкторам и методам. Модификаторы доступа могут быть указаны отдельно для класса, его конструкторов, полей и методов. Модификаторы доступа Java иногда также упоминаются в ежедневной речи как спецификаторы доступа Java, но правильное имя - модификаторы доступа Java. Классы, поля, конструкторы и методы могут иметь один из четырех различных модификаторов доступа Java:
- Элемент списка
- private
- default (package)
- protected
- public
Из Управление доступом к членам класса :
Модификаторы уровня доступа определяют, могут ли другие классы использовать определенное поле или вызвать конкретный метод. Существует два уровня контроля доступа:
- На верхнем уровне - public или package-private (без явного модификатора).
- На уровне участника - общедоступный, закрытый , protected или package-private (без явного модификатора).
Класс может быть объявлен публичным модификатором, и в этом случае этот класс будет виден всем классам. Если класс не имеет модификатора (по умолчанию, также известного как private-package), он виден только в его собственном пакете
В следующей таблице показан доступ к членам, разрешенным каждым модификатором.
╔═════════════╦═══════╦═════════╦══════════╦═══════╗ ║ Modifier ║ Class ║ Package ║ Subclass ║ World ║ ╠═════════════╬═══════╬═════════╬══════════╬═══════╣ ║ public ║ Y ║ Y ║ Y ║ Y ║ ║ protected ║ Y ║ Y ║ Y ║ N ║ ║ no modifier ║ Y ║ Y ║ N ║ N ║ ║ private ║ Y ║ N ║ N ║ N ║ ╚═════════════╩═══════╩═════════╩══════════╩═══════╝
Первый столбец данных указывает, имеет ли сам класс доступ к члену, определенному уровнем доступа. Как вы можете видеть, у класса всегда есть доступ к своим членам. Во втором столбце указано, имеют ли классы в том же пакете, что и класс (независимо от их происхождения), доступ к члену. Третий столбец указывает, имеют ли подклассы класса, объявленного вне этого пакета, доступ к элементу. Четвертый столбец указывает, имеют ли все классы доступ к члену.
Уровни доступа влияют на вас двумя способами. Во-первых, когда вы используете классы, которые поступают из другого источника, например классы на платформе Java, уровни доступа определяют, какие члены этих классов могут использовать ваши собственные классы. Во-вторых, когда вы пишете класс, вам нужно решить, какой уровень доступа должен иметь каждая переменная-член и каждый метод в вашем классе.
Я решил это, расширив NumberKeyListener
, чтобы принять ',' и '.', и overrode:
@Override
public int getInputType() {
return InputType.TYPE_CLASS_NUMBER
| InputType.TYPE_NUMBER_FLAG_DECIMAL
| InputType.TYPE_NUMBER_FLAG_SIGNED;
}
Кроме того, я установил TextWatcher в EditText, который заменил все '.' с ',' в afterTextChanged()
.
Но мне не удалось показать запятую на экранной клавиатуре.
В пространстве имен android вы можете использовать:
android:inputType="numberDecimal"
, который позволяет вам вводить «.»
Невозможно показать '.' в мягкой клавиатуре, не создавая свой собственный. Решение, которое я нашел, это:
<EditText
android:inputType="numberDecimal"
android:digits="0123456789," />
Таким образом, когда вы нажимаете кнопку «.», в мягкой клавиатуре ничего не происходит; допускаются только числа и запятые
Вы можете использовать следующее обходное решение, которое также включает запятую в качестве допустимого ввода: -
Через XML:
<EditText
android:inputType="number"
android:digits="0123456789.," />
Программно:
EditText input = new EditText(THE_CONTEXT);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789.,"));
Таким образом, система Android покажет клавиатуру номеров и позволит вводить запятую. Надеюсь, это поможет:)