我想在android,Data Binding Api中为TextView连接两个字符串

Sas*_*lli 57 data-binding android android-layout android-databinding

我使用DataBindingApi来设置android布局中的视图.这是我的布局.

layout.xml

<?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:android="http://schemas.android.com/apk/res/android">
  <data>
    <variable name="user" type="testing.sampleapp.com.sampleapp.User"/>
  </data>
<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{ "Hello " + user.firstName}"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我希望TextView显示Hello UserName.如何使用数据绑定api实现此目的.

Rav*_*avi 149

严重的口音(`)来表示它

android:text="@{`Hello ` + user.firstName}"/>
Run Code Online (Sandbox Code Playgroud)

  • 是的,它起作用了。谢谢 。我使用的是单引号 (')。重音(`)对我有用。 (2认同)

Pra*_*ash 43

@GeorgeMount在对其中一个解决方案的评论中已经回答了这个问题.到目前为止,对我来说这是最好的解决方案.请给他一个+1

android:text="@{@string/location(user.city,user.state)}"
Run Code Online (Sandbox Code Playgroud)

在strings.xml中

<string name="location">%1$s, %2$s</string>
Run Code Online (Sandbox Code Playgroud)


Khe*_*raj 26

连接字符串的方法很多

1.使用字符串资源(最优选的是因为本地化)

android:text= "@{@string/generic_name(user.name)}"

只需像这样制作字符串资源.

<string name="generic_name">Hello %s</string>
Run Code Online (Sandbox Code Playgroud)

2.硬编码concat

android:text="@{`Hello ` + user.name}"/>
Run Code Online (Sandbox Code Playgroud)

3.使用Stringconcat方法

android:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Run Code Online (Sandbox Code Playgroud)

space是一个放在里面的html实体strings.xml.因为XML不直接接受Html实体或特殊字符.(链接Html实体)

<string name="space">\u0020</string>
Run Code Online (Sandbox Code Playgroud)

4.使用 String.format()

android:text= "@{String.format(@string/Hello, user.name)}"
Run Code Online (Sandbox Code Playgroud)

您必须在此类型的布局中导入String类.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <import type="String" />
    </data>
    <TextView
        android:text= "@{String.format(@string/Hello, user.name)}"
        ... >
    </TextView>
</layout>
Run Code Online (Sandbox Code Playgroud)

5.另一种方法

android:text="@{@string/generic_name(user.firstName,user.lastName)}"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,放入一个字符串资源 strings.xml

<string name="generic_name">%1$s, %2$s</string>
Run Code Online (Sandbox Code Playgroud)

可以有许多其他方式,选择你需要的方式.


小智 7

由于xml支持属性值的单引号,因此您也可以这样做:

android:text='@{"Hello "+user.firstName}'
Run Code Online (Sandbox Code Playgroud)


kis*_*rma 7

在静态字符串和其他动态的情况下,您可以使用它

android:text="@{`Hello ` + user.firstName}"/>
Run Code Online (Sandbox Code Playgroud)

如果是动态数据,您可以使用它。

android:text='@{user.firstName+" "+user.lastName}'
Run Code Online (Sandbox Code Playgroud)


Yog*_*thi 6

有两种方法.

第一解决方案

带有重音符号(`)

android:text="@{`Hello ` + user.firstName}"/>
Run Code Online (Sandbox Code Playgroud)

二解决方案

声明你的字符串 strings.xml

喜欢"Hello %1$s , (whatever you want to add then add here)".

使用 String.format(stringResource, upsatename);

  • 您还可以在表达式中使用格式化的字符串资源:`android:text ="@ {@ string/hello(user.firstName)}"` (21认同)

Rea*_*oid 5

在 xml 布局中执行 concat:

<data>

/*This is used for android view*/
<import type="android.view.View" />

/*This is used for android resources*/
<import type="com.myapp.R" />

/*This is app context*/
<variable
    name="context"
    type="android.content.Context" />

/*This is used for model data*/
<variable
    name="item"
    type="com.myapp.models.Chapter" />
</data>

android:text="@{item.serialNo.concat(@string/space).concat(item.title)}"
Run Code Online (Sandbox Code Playgroud)

在 strings.xml 中,我添加了空白代码:

<string name="space">\u0020</string>
Run Code Online (Sandbox Code Playgroud)


Jac*_*777 5

如果你想将String资源与模型中的数据连接起来,你可以这样做:

 android:text='@{@string/release_date+model.release_date}'
Run Code Online (Sandbox Code Playgroud)