Сделайте определенную часть текста полужирным, используя DataBinding

Записи в /etc/fstab обычно имеют от четырех до шести полей; Я не уверен, что если не удастся удалить третье поле (тип файловой системы) и четвертое поле (параметры). Попробуйте

servername:/home  /mnt/home  nfs  auto

На самом деле одна из проблем, которую я могу предвидеть, заключается в том, что, поскольку тип файловой системы отсутствует, сценарии загрузки пытаются установить файловую систему слишком рано. Если вы явно укажете сетевую файловую систему, эта файловая система будет смонтирована только тогда, когда сеть будет работать.

0
задан 13 August 2018 в 15:51

4 ответа

// помещаем этот метод в ваш модельный класс, где name - это строковая переменная, которая задана в соответствии с заданным ответом api

public Spanned getHtmlText(){
        return Html.fromHtml("<b>" + name + "</b>");
    }

// в xml используйте это, где userList - это переменное имя класса модели.

 android:text="@{userList.htmlText}"
0
ответ дан 15 August 2018 в 17:01

Вы должны создать BindingAdapter и SpannableStringBuilder.

Адаптер привязки
object Util {
    @BindingAdapter("main","secondText")
        @JvmStatic
        fun setBoldString(view: AppCompatTextView, maintext: String,sequence: String) {
            view.text = Util.getBoldText(maintext, sequence)
        }



    @JvmStatic
        fun getBoldText(text: String, name: String): SpannableStringBuilder {
            val str = SpannableStringBuilder(text)
            val textPosition = text.indexOf(name)
            str.setSpan(android.text.style.StyleSpan(Typeface.BOLD),
                    textPosition, textPosition + name.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            return str
        }
}

Адаптер привязки

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:main="@{`you will pay $160 for your pair`}"
        app:secondText="@{`$160`}"
        android:textColor="@color/black"
        android:textSize="22sp" />

XML

0
ответ дан 15 August 2018 в 17:01

Вы можете использовать адаптер привязки в сочетании с SpannableString. После определения адаптера привязки вы можете повторно использовать его во всех файлах макета.

@BindingAdapter({"mainText", "priceToFormat"})
public static void format(TextView textView, String mainText, float 
      productPrice){
   //Use spannable string to format your text accordingly
   textView.setText(formattedText);
}

Вы можете передать эти параметры в свой файл макета следующим образом:

<TextView
   .
   .
   app:mainText = "@{ priceText }"
   app:priceToFormat = "@{ price }"/>

Хорошо удачи.

0
ответ дан 15 August 2018 в 17:01
  • 1
    Понравились ваши решения. Хотя мы все еще манипулируем кодом. Вызов format(view, sdfgsdfg, 12). Ваши решения просто вызывают метод, который имеет аннотацию BindingAdapter, но здесь бесполезно. Поскольку мы все еще используем TexView.setText. Я действительно хочу избежать передачи текста и манипулирования им в коде. – Vikalp Patel 13 August 2018 в 15:59
  • 2
    Моя цель Цель состоит в том, чтобы в полной мере использовать DataBinding и избегать всех манипуляций с кодом. – Vikalp Patel 13 August 2018 в 16:00
  • 3
    @VikalpPatel Если у представления нет метода, определенного с помощью этой конкретной функции, вам придется манипулировать им в коде. Связывание данных просто связывает ваши данные с вашими представлениями. Он не форматирует данные, если вы не определите что-то вроде адаптера привязки или не передадите данные другому методу для обработки, насколько я знаю. Удачи. – rbd_sqrl 13 August 2018 в 16:08
  • 4
    @rbd_sqrl: Да, я знаю, что DataBinding просто связывает данные с представлениями. Но моя идея исследовать DataBinding в полной мере. Да, мы можем использовать Spannable. Спасибо за предоставление решения :) – Vikalp Patel 13 August 2018 в 16:12

В соответствии с @CommonsWare,

Пробовал путем добавления основного тега Html <string name="product_price">If you are selected, you will have to pay <![CDATA[<b>$%d</b>]]> for your pair.</string>

Файл макета: Импортирован Html

 <?xml version="1.0" encoding="utf-8"?>
 <layout
   <data>
   <import type="android.text.Html"/>
   <data>
     <LinearLayout>
       <android.support.design.widget.CoordinatorLayout>
       <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_marginEnd="@dimen/spacing_xlarge"
          android:layout_marginStart="@dimen/spacing_xlarge"
          android:layout_marginBottom="@dimen/spacing_small"
          android:text="@{Html.fromHtml(@string/product_price(productPrice))}"
          android:textColor="@color/button_tertiary"
          android:visibility="@{productPrice > 0}"
          style="@style/Body.Small"
          />
       </android.support.design.widget.CoordinatorLayout>
     </LinearLayout>
 </layout>
-1
ответ дан 15 August 2018 в 17:01
  • 1
    @pskink: Да, Html.fromHtml следует избегать. Но я не хочу манипулировать им в коде. Это моя конечная цель - использовать DataBinding. Будет обновлять ответ, когда и когда найдет другое лучшее решение. – Vikalp Patel 14 August 2018 в 06:57
  • 2
    @pskink: На данный момент я использую только ресурсы string @string/xxxxx. [F3] – Vikalp Patel 14 August 2018 в 11:10
  • 3
    "But I don't want to manipulate it in code" - и Html.fromHtml не является java-кодом? я уже дал вам решение с простым SpannableString, но все же вы думаете, что Html.fromHtm не требует никакого Java-кода и лучше / быстрее, чем простой метод setSpan - вот почему я отказался от вашего ответа – pskink 14 August 2018 в 17:06

Другие вопросы по тегам:

Похожие вопросы: