Intereting Posts
Android – это onDestroy, который должен уничтожить активность, свои переменные и освободить память AnimateLayoutChanges не анимирует удаление стрелки назад с панели инструментов Создать новый ParseUser с помощью Google+ AccessToken возвращает InvalidSession? Связь между фрагментами применяется к вложенным фрагментам? Как использовать текстовое окно в Android PreferenceScreen? Java Android – библиотека волейбола – получите Bitmap через ImageLoader Программный запуск активности «Добавить учетную запись Google» на Android Как отправить код USSD, содержащий десятичную плавающую точку (.)? Google Chrome для удаленной отладки Android – «localhost: 9222» недоступно Как установить тело HttpPut на Android? (Без добавления библиотек) Причина для проверки сохраненного состояния на frgamentActivity oncreate () Как использовать OpenStreetMap в разработке собственных приложений для Android Android Studio – рендеринг проблемы с библиотекой поддержки Android Convert String для JSONObject Циклическое наследование и интерфейсы – класс A не может реализовать интерфейс класса B, тогда как класс B реализует интерфейс

Как отображать форматированные суммы в TextView?

У меня есть символ валюты в String и сумма в double размере. До сих пор я показываю такие суммы:

 amount.setText(currency + " " + amount); 

И в некоторых местах у меня есть 2 TextView s для отображения суммы с дополнением между ними:

 currency.setText(currency); amount.setText(amount); 

Это нормально. Но я перемещаю этот код в файлы макета с привязкой данных к андроидам и есть ли простой способ форматировать и показывать суммы в android?

Как symbol[space]amount где сумма должна быть отформатирована с 2 десятичными точками, если она есть, иначе целым числом. Например, 100 будет отображаться как 100, а не 100.00, но 123.2 будет отображаться как 123.20 вместе с символом валюты сначала ($ 123.20, $ 100).

Я знаю, что существует несколько способов (формат строки данных, NumberFormat). Я могу это сделать (я еще не использовал ни одного из них, просто слышал о них), но какой будет самый простой и чистый способ сделать это?

Я пытаюсь найти и преобразовать все 2 текстовых представления в один и найти единый способ форматирования и отображения сумм.

Спасибо.

Я думаю, вам нужно посмотреть на некоторые библиотеки, вы найдете несколько хороших примеров здесь, я рекомендую вам одну из лучших библиотек для привязки данных текстовой валюты, я использую ее, очень полезную для меня, ее сохранение моей строки кода здесь – это MoneyTextView

 <org.fabiomsr.moneytextview.MoneyTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="32dp" app:symbol="$" app:symbolGravity="start|top" app:symbolTextSize="30sp" app:symbolMargin="6dp" app:amount="1256.56" app:baseTextSize="54sp" app:decimalDigitsTextSize="30sp" app:decimalMargin="6dp" app:includeDecimalSeparator="false" app:baseTextColor="#FBFFE3"/> 

Если вы используете этот amount.setText(currency + " " + amount); Чем каждый раз, когда вы используете text.getText() вам нужно отделить $ и пробел от textView для геометрии фактической суммы.

НО

В 2 textView вам не нужно выполнять какую-либо операцию для метода getText (), который вы непосредственно получаете.

Используйте это для 2 цифр десятичной цифры и 0 десятичных цифр …

  double price=23.1000; int number=(int)((price*100)%100); yourTextView.setText(number==0?new DecimalFormat("0").format(price):new DecimalFormat("0.00").format(price)); 

вывод:-

23.1000 ——-> 23.10

23.0007 ——-> 23

Вышеприведенный код работает …..

Примечание: – В приведенном выше 2, я предлагаю пойти с 2 textView. Это так просто.

 amount.setText(currency + String.format("%.2f", amount)); 

Если вы ищете простой и простой способ отформатировать строку и установить ее в TextView.

Для популярных методов следует этот Android, возможно ли форматировать текстовое изображение, например System.out.format («% 02d», n) ;?

Если вы собираетесь использовать DataBinding, вам необходимо настроить свой собственный метод привязки, поскольку атрибуты origin android: text являются Integer (String resource) или String (Text) .

В официальном приложении Android вы можете использовать что-то вроде этого ( https://developer.android.com/topic/libraries/data-binding/index.html#expression_language )

 android:text="@{@string/nameFormat(firstName, lastName)}" android:text="@{@plurals/banana(bananaCount)}" 

Но если вы хотите его более гибким способом, вам нужно написать свои собственные методы привязки, как показано ниже.

В вашем коде,

  @BindingAdapter(value = {"android:text", "android:formatArgs"}, requireAll = false) public static void bindTextStr(TextView tv, String text, Object[] formatstr) { if (formatstr == null) { tv.setText(text); } else { tv.setText(String.format(text, formatstr)); } } 

В вашем макете xml,

 <variable name="normalStr" type="java.lang.String"/> <variable name="data" type="Object[]"/> ... <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{normalStr}" android:formatArgs="@{data}" /> 

В коде действия,

  mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); mBinding.setNormalStr("Data : 1(%s), 2(%d)"); mBinding.setData(new Object[]{"Hello World",12345}); 

Вдохновленный ответом @ Nowshad, я могу сделать это без внешней библиотеки с библиотекой привязки данных.

Предоставлять валюту и количество в файлах макета при необходимости:

  <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="end" android:textAppearance="@style/TextAppearance.AppCompat.Large" app:amount="@{amount}" app:currency="@{currency}" /> 

И обеспечить адаптер привязки:

 @BindingAdapter({"currency", "amount"}) public static void setCurrencyAndAmount(TextView textView, String currency, double amount) { SpannableString spannableString = new SpannableString(currency + " " + new DecimalFormat("#.##").format(amount)); spannableString.setSpan(new RelativeSizeSpan(0.6f), 0, 1, 0); textView.setText(spannableString); } 

Простой и эффективный.

Может быть, это полезно: MultiSizeTextView

 <com.github.captain_miao.multisizetextview.MultiSizeTextView android:id="@+id/multi_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" app:beforeText="@string/before_text" app:beforeTextColor="@color/red" app:beforeTextSize="@dimen/text_size_small" app:beforeTextStyle="bold" app:centerText="@string/app_name" app:centerTextColor="@color/gray" app:centerTextSize="@dimen/text_size_big" app:afterText="@string/after_text" app:afterTextColor="@color/blue" app:afterTextSize="@dimen/text_size_small" app:afterTextStyle="bold" /> 

Введите описание изображения здесь