그것은 오류 텍스트 그냥 TextView
입니다 사실,하지만 TextAppearance
스타일이 TextView
이 그것을 낳는 방법 만 텍스트 자체에 영향을 미칩니다. errorTextAppearance
을 사용하여 오류 텍스트의 크기, 활자체, 색상 등을 설정할 수 있지만 에는 ellipsize
또는 maxLines
을 설정할 수 없습니다.
오류는 단지 TextView
이므로 원하는 속성을 직접 설정할 수 있습니다. 우리는 TextInputLayout
의 하위 객체 View
을 반복 할 수 있지만, 다소 불편할 뿐더러 TextInputLayout
은 EditText
이 아닌 하나 이상의 TextView
을 보유 할 수 있기 때문에 신뢰성이 떨어집니다. 나는 보통 이와 같은 것들에 대한 반성을 선호한다. setErrorEnabled()
true
메소드 호출 될 때
오류 TextView
가 생성되고, 상기 방법은 false
호출하면, 해당 필드는 무효가된다. 이 모든 것을 외부 적으로 추적하려고 시도하지 않고 TextInputLayout
의 서브 클래스를 작성하고 오류가 발생하면 TextView
에 원하는 속성을 설정하는 것이 더 쉽습니다. 인스턴스화 중에 setErrorEnabled()
이 자동으로 호출되므로이 기능을 사용하기 위해 메소드를 명시 적으로 호출 할 필요가 없습니다. 예를 들어
:
public class CustomTextInputLayout extends TextInputLayout {
public CustomTextInputLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setErrorEnabled(boolean enabled) {
super.setErrorEnabled(enabled);
if (!enabled) {
return;
}
try {
Field errorViewField = TextInputLayout.class.getDeclaredField("mErrorView");
errorViewField.setAccessible(true);
TextView errorView = (TextView) errorViewField.get(this);
if (errorView != null) {
errorView.setMaxLines(1);
errorView.setEllipsize(TextUtils.TruncateAt.END);
}
}
catch (Exception e) {
// At least log what went wrong
e.printStackTrace();
}
}
}
이것은 TextInputLayout
위한 드롭 인 교체, 당신은 그냥 일반 클래스처럼 당신의 레이아웃에서 사용할 수 있습니다.
<com.mycompany.myapp.CustomTextInputLayout
android:id="@+id/til"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.mycompany.myapp.CustomTextInputLayout>
완성도 '를 위해서
, 나는 위의 방법 대신에 사용할 수있는 다음을 포함합니다하는 TextInputLayout
의 첫 번째 TextView
아이를 찾을 수 원하는 속성을 설정하십시오. 기본 기본값 인 TextInputLayout
에서 오류 TextView
은이 첫 번째로 표시되어야합니다. 추가 검사가 필요하면 발견 된 아동의 텍스트를 TextInputLayout
의 오류로 설정된 텍스트와 비교할 수 있습니다. 당신은 단지 하나 서브 클래스 내부 또는 외부, 그 인스턴스와 직접 findErrorView()
를 호출 할 수 있도록
// Returns true if found
private static boolean findErrorView(ViewGroup vg) {
final int count = vg.getChildCount();
for (int i = 0; i < count; ++i) {
final View child = vg.getChildAt(i);
if(child instanceof ViewGroup) {
if(findErrorView((ViewGroup) child)) {
return true;
}
}
else if (child.getClass().equals(TextView.class)) {
setAttributes((TextView) child);
return true;
}
}
return false;
}
private static void setAttributes(TextView t) {
t.setMaxLines(1);
t.setEllipsize(TextUtils.TruncateAt.END);
}
TextInputLayout
는 ViewGroup
입니다. 그러나 오류가 활성화 될 때마다 TextView
오류가 새로 작성되고 오류가 발생하면 파기됩니다. 이러한 설정은이를 통해 유지되지 않습니다.
가 XML에 추가 ID로 오류 텍스트 뷰를 가져올 수있는이 선 안드로이드 : 만일 Singleline = "true"로 –
@MalikAbuQaoud 이미 그것을 시도하고 그것이 작동하지 않습니다. 그리고 singleLine은 이제 비추천입니다 – andrei
singleLIne 여전히 작동하고 그것은 나와 함께 작동합니다. 그러면 줄임표를 마키로 변경하려고합니다. –