Модуль, предназначенный для инкапсуляции использования Textfield для сбора информации о валюте от пользователя. Поддерживает все локали/валюты, совместимые с ISO-3166.
Добавьте ссылку на mavenCentral() в build.gradle проекта:
repositories {
...
mavenCentral()
...
}
Добавьте зависимости в build.gradle записи:
dependencies {
...
implementation 'com.gitee.archermind-ti:CurrencyEditText:1.0.1'
...
}
Использование модуля не сильно отличается от использования любого другого представления EditText. Просто определите представление в макете XML:
<com.blackcat.currencyedittext.CurrencyEditText
ohos:id="$+id:cet"
ohos:top_margin="10vp"
ohos:height="match_content"
ohos:text_size="16fp"
ohos:width="match_parent"
/>
Готово! Модуль CurrencyEditText обрабатывает все манипуляции со строками и мониторинг ввода, необходимые для создания чистой и простой в использовании системы ввода валюты.
По умолчанию представление CurrencyEditText выглядит как поле EditText с подсказкой, установленной на символ местной валюты пользователя.
Когда пользователь вводит дополнительные значения, они появляются, начиная с самой правой цифры, сдвигая старые записи цифр влево по мере ввода.
В зависимости от настроек языка и локали пользователя отображаемый текст будет автоматически форматироваться в соответствии со стандартом пользователя. Например, когда пользователь выбирает «Немецкий», справа появляется символ евро, как показано ниже.
По умолчанию CurrencyEditText предоставляет значение «подсказка» для текстового поля. Это значение по умолчанию является символом кода валюты для заданной настройки локали пользователя. Это полезно для целей отладки, а также обеспечивает чёткое и понятное руководство для пользователя.
Если вы предпочитаете установить собственный текст подсказки, просто установите подсказку так же, как и для любого другого поля EditText. Вы можете сделать это либо в макете XML, либо в коде. Чтобы полностью удалить подсказку, установите подсказку в пустую строку («»).
По умолчанию CurrencyEditText не позволяет вводить отрицательные числа. Это связано с тем, что наиболее распространённым вариантом использования ввода валюты является информация о транзакциях, где абсолютное значение транзакции вводится отдельно от объявления депозита или снятия средств.
Однако, если вам действительно нужно поддерживать ввод отрицательных чисел, вы можете включить его, установив атрибут allow_negative_values.
В xml:
<com.blackcat.currencyedittext.CurrencyEditText
ohos:layout_width="match_parent"
ohos:layout_height="match_content"
app:allow_negative_values="true"
/>
В java:
CurrencyEditText tb = (CurrencyEditText) findComponentById(ResourceTable.Id_test);
tb.setAllowNegativeValues(true);
Вы также можете установить позицию десятичных цифр (см. ниже) через xml или java
В xml:
<com.blackcat.currencyeditext.CurrencyEditText
ohos:layout_width="match_parent"
ohos:layout_height="match_content"
app:decimal_digits="0"
/>
В java:
CurrencyEditText tb = (CurrencyEditText) findComponentById(ResourceTable.Id_test);
tb.setDecimalDigits(0);
Поскольку CurrencyEditText является расширением класса EditText, он содержит все те же геттеры и сеттеры, которые предоставляет EditText.
Чтобы получить полностью отформатированное строковое значение, отображаемое пользователю, просто вызовите метод getText() вашего объекта CurrencyEditText. Метод getRawValue() возвращает необработанные числовые значения, которые были введены пользователем, и их следует рассматривать как целое значение местной валюты пользователя.
Например, если текст поля равен $13,37, этот метод вернёт значение типа Long, равное 1337, поскольку пенни — это наименьшая денежная единица в долларах США.
Ответственность за правильную обработку этого значения лежит на вызывающем приложении. Следует учитывать, что деление этого числа для преобразования его в другую номинальную стоимость может привести к ошибкам округления с плавающей запятой, поэтому выполнять эту операцию следует с большой осторожностью.
Чтобы упростить работу с локальными значениями после извлечения, CurrencyEditText предоставляет метод getLocale(), который возвращает локаль, используемую данным экземпляром для форматирования.
Локали
CurrencyEditText использует объект Locale для правильного форматирования заданного значения. Есть две переменные Locale, доступные через геттеры и сеттеры объекта CurrencyEditText: locale и defaultLocale.
locale — локаль по умолчанию, основанная на настройках OpenHarmony. Это значение можно изменить в настройках OpenHarmony, а также через API CurrencyEditText. Обратите внимание, что это значение, полученное с устройства конечного пользователя, не всегда совместимо со стандартом ISO-3166. Оно используется как переменная «счастливого пути», но из-за потенциального несоответствия стандарту ISO-3166 CurrencyEditText будет использовать defaultLocale в случае ошибки.
defaultLocale — отдельное значение, которое используется в качестве запасного варианта, если предоставленное значение локали не работает. Это может произойти, если значение locale не соответствует стандарту ISO-3166. Список поддерживаемых значений можно найти в Java.util.Locale.getISOCountries(). Обратите внимание, что список поддерживаемых значений жёстко запрограммирован в каждой версии Java, поэтому со временем список поддерживаемых ISO может измениться.
Значение по умолчанию для defaultLocale — Locale.US. И это значение, и значение locale можно перезаписать с помощью сеттеров, доступных в объекте CurrencyEditText. Будьте осторожны и убедитесь, что если вы переопределяете значение defaultLocale, вы используете только значения, поддерживаемые ISO-3166, иначе форматер выдаст исключение IllegalArgumentException.
Форматирование значений
Если вы хотите получить отформатированную версию необработанного значения, ранее полученного от пользователя, используйте метод formatCurrency() класса CurrencyEditText. Он принимает один параметр: строку, представляющую значение, которое вы хотите отформатировать. Ожидается, что это значение будет в том же формате, что и возвращаемое значение метода getRawValue(). Например:
//rawVal содержит "1000"
CurrencyEditText cet = new CurrencyEditText();
... пользователь вводит "$10.00"
//rawVal равно 1000
Long rawVal = cet.getRawValue();
//formattedVal принимает "1000" и возвращает "$10.00"
String formattedVal = cet.formatCurrency(Long.toString(rawVal));
//или
String formattedVal = cet.formatCurrency(rawVal);
Десятичные цифры
По умолчанию текстовый форматтер CurrencyEditText использует объект locale для получения информации об ожидаемой валюте. Сюда входит расположение десятичного разделителя для младших номиналов (например, доллары против центов). Если вы хотите изменить положение десятичной точки, вы можете использовать метод setDecimalDigits(). Это очень полезно в некоторых случаях, например, если вы хотите показывать только суммы в долларах.
CurrencyEditText cet = new CurrencyEditText();
... пользователь вводит 1000
//currentText равно "$10.00"
String currentText = cet.getText();
cet.setDecimalDigits(0);
//newText равно "$1,000"
String newText = cet.getText();
DecimalDigits также можно установить в XML-макете, если вам не нужна ссылка на представление Java.
Обратите внимание, что допустимый диапазон DecimalDigits составляет от 0 до 340. Любое значение вне этого диапазона вызовет исключение IllegalArgumentException. Функциональность.
Рекомендуется загрузить и запустить приложение, чтобы понять, как работает CurrencyEditText.
CurrencyEditText разработан как небольшой и лёгкий модуль, который должен упростить работу разработчикам. Если вам не хватает какой-либо функциональности, отправьте новый Issue и отметьте его как Enhancement, и я посмотрю. Я не гарантирую, что соглашусь реализовать это.
Как указано в лицензии Apache (под которую подпадает этот проект), используя это программное обеспечение, вы соглашаетесь использовать его AS-IS. Я не утверждаю, что этот код на 100% свободен от ошибок или других проблем. Хотя я сделал всё возможное, чтобы избежать ошибок округления и протестировать все потоки кода, я не могу гарантировать или предоставить какую-либо гарантию того, что этот код будет работать у вас. Вы сами должны проанализировать это программное обеспечение и определить, соответствуют ли его набор функций и качество вашим потребностям.
Copyright 2017 BlacKCaT27
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )