iam*_*oid 7 data-binding android android-textinputlayout android-databinding
我需要在app中创建字段编辑页面.有编辑联系人的EditText列表.对于每种字段类型,我都有一个布局.例如 - 对于名称和姓氏,它是浮动标记的编辑文本.对于Facebook - 简单的编辑文本与图标.我正在使用Android数据绑定库创建此列表
我已经创建了布局
<data>
<variable
name="item"
type="app.core.db.model.Field" />
</data>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="65dp"
app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
app:theme="@style/EditFieldFloatLabeled">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:hint="@{item.getHint()}"
android:imeOptions="actionNext"
android:maxLines="1" />
</android.support.design.widget.TextInputLayout>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
但浮动标签不起作用.我开始逐行评论以找出原因.当我评论线时,浮动标签变得有效
android:hint="@{item.getHint()}
Run Code Online (Sandbox Code Playgroud)
(并用硬编码文本替换它).根据字段类型getHint()
返回R.string.{something}
.
在那里我发现了比以编程方式设置提示产生浮动标签消失.我不能使用静态布局(而不是回收者视图),因为字段列表可能会出现dynsmically(例如:我在字段中写入电话号码,而在其后为其他电话号码插入空电话字段).
有没有办法以相同的方式创建浮动标签(通过使用字段类型定义提示)?
小智 13
我有同样的问题.
解决方案是使用TextInputLayout上的数据绑定设置提示.
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="65dp"
android:hint="@{item.getHint()}"
app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
app:theme="@style/EditFieldFloatLabeled">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:imeOptions="actionNext"
android:maxLines="1" />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
问题是,当没有分配任何内容时,将给出 0 作为资源 ID。您可能会在 logcat 中看到这样的异常:
android.content.res.Resources$NotFoundException: String resource ID #0x0
Run Code Online (Sandbox Code Playgroud)
在第一次计算表达式之前,您可能尚未为该项目分配值。如果要确保资源未设置为 value ,则应在创建绑定后立即分配该项目0
。
MyBinding binding = MyBinding.inflate(inflater, parent, true);
binding.setItem(item);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1120 次 |
最近记录: |