嘿,有人知道为什么会发生这种情况(如图所示)吗? 小米MiA1会发生这种情况,而诺基亚7.1可以正常工作。
我的xml视图布局
FrameLayout - root
ScrollView
RelativeLayout
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/profile.EMAIL"
android:theme="@style/TextInputLayoutTheme"
android:margin="16dp"
android:paddingBottom="8dp"
app:layout_constraintTop_toBottomOf="@+id/phone_wrapper"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:textSize="16sp"
android:textColor="@color/darkTextColor"
android:imeOptions="actionDone"
tools:text="Email"
/>
</com.google.android.material.textfield.TextInputLayout>
我认为这里放置TextInputLayoutTheme并不重要,因为我只使用视图的颜色进行操作
答案 0 :(得分:3)
如果您多次在TextInputLayout上设置错误,错误消息文本将被截断。 因此,每次设置TextInputLayout错误消息文本时,只需先将其设置为null。
textInputLayout.setError(null);
textInputLayout.setErrorEnabled(false);
textInputLayout.setError("Error Message");
答案 1 :(得分:2)
Layout Inspector显示即使该错误有一定空间,它也不会全部绘制视图。 LinearLayouts(和一个简单的FrameLayout)中的所有内容都没有,所以没有任何东西可以重叠它,paddings设置为0,没有代码更改高度或实现中可疑的东西,所以我不知道这是什么。这种行为的原因。
尽管我找到了一些可行的解决方案。您需要在map
中找到一个视图错误(ID为TextInputLayout
),并向其中添加一些小填充。我通过扩展TextInputLayout并将此类代码添加到init中来完成此操作。
textinput_error
答案 2 :(得分:1)
我通过保存并重新分配LayoutParams解决了该问题:
final ViewGroup.LayoutParams params = textInputLayout.getLayoutParams();
textInputLayout.setError(errorMessage);
textInputLayout.setLayoutParams(params);
答案 3 :(得分:0)
我通过将错误字体的大小增加到14sp(原始值为12sp)解决了问题
<com.google.android.material.textfield.TextInputLayout
[...]
app:errorTextAppearance="@style/MyProfile.Error">
<style name="MyProfile.Error" parent="TextAppearance.Design.Error">
<item name="android:textSize">14sp</item>
</style>
尽管正如Shabbir Dhangot所说的,我可能是设置TIL.setErrorEnabled(true)可能对其他方面有所帮助。
答案 4 :(得分:0)
我知道这不是最好的解决方案,但是您可以在错误消息的开头添加一个\n
。
例如,如果您的错误是Error
,只需将其更改为\nError
。
如果要更改\n
的大小,可以使用:
String newLine = "\n";
String errorMessage = "Error";
SpannableString spannableErrorMessage = new SpannableString(newLine + errorMessage );
spannableName.setSpan(new TextAppearanceSpan(activity, R.style.my_style),0,a.length(), 0);
spannableName.setSpan(new RelativeSizeSpan(2.0f), a.length(), a.length() + 1, 0);
答案 5 :(得分:0)
正如某些人已经指出的那样,这是一个已知的错误。参见https://issuetracker.google.com/issues/116747167
我通过执行以下操作解决了这一问题(请注意,以下代码是Kotlin,所以!=适用于字符串):
if(myInputLayout.error != error){
myInputLayout.error = error
}
答案 6 :(得分:0)
您可以使用此Kotlin扩展程序:
/**
* Fix a bug with [TextInputLayout] that cut the error text when setting the same text twice.
*/
fun TextInputLayout.setFixedError(errorTxt: CharSequence?) {
if (error != errorTxt) {
error = errorTxt
}
}
用法:
yourTextInput.setFixedError("Your error text")