TextInputLayout.setError ()는 오류를 제거한 후 빈 공간을 남깁니다.
나는 최근에 사용 TextInputLayout
하고 그건 setError()
방법. 내가 얻는 문제는 setError(null)
그것을 호출하여 오류를 지우 면 하단에 너무 많은 빈 공간이 남습니다.
표준:
오류 있음 :
오류 삭제 후 :
소스보고 후, 나는 그들이보기 만들고있는 것을 발견 INVISIBLE
대신을GONE
.setListener(new ViewPropertyAnimatorListenerAdapter() { @Override public void onAnimationEnd(View view) { view.setVisibility(INVISIBLE); // here it is updateLabelVisibility(true); } }).start();
왜 그런지 궁금합니다. 빈 공간을 피하기 위해 이것을 해결하는 방법은 무엇입니까?
문서 확인
public void setErrorEnabled (boolean enabled)
그것은 말한다
이 레이아웃에서 오류 기능이 활성화되었는지 여부. setError (CharSequence)를 통해 오류 메시지를 설정하기 전에이 기능을 활성화하면 오류가 표시 될 때이 레이아웃의 크기가 변경되지 않습니다.
이를 바탕으로 setErrorEnabled(true)
이전 설정 을 시도 setError()
하고 setErrorEnabled(false)
이후 설정하십시오 setError(null)
.
메서드 setErrorEnabled(false)
는 여분의 공간을 지울 것이므로 setError(null)
.
이 페이지를 참조 하십시오. Google은 향후 지원 라이브러리 버전에서 수정 사항을 릴리스 할 예정입니다. 그것은 말한다,
지금 수정하고 싶다면 메서드를 확장
TextInputLayout
하고 재정의 할 수setErrorEnabled()
있지만 이전 버전과의 호환성을 보장 할 수 없습니다. 에서 상태를 변경할 위험이 있기 때문입니다TextInputLayout
.public class TextInputLayout extends android.support.design.widget.TextInputLayout{ public TextInputLayout(Context context) { super(context); } public TextInputLayout(Context context, AttributeSet attrs) { super(context, attrs); } public TextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setErrorEnabled(boolean enabled) { super.setErrorEnabled(enabled); if (enabled) { return; } if (getChildCount() > 1) { View view = getChildAt(1); if (view != null) { view.setVisibility(View.GONE); } } } }
사용하지 마십시오 setErrorEnabled(boolean)
. 두 번째부터 오류가 표시되지 않습니다.
public class MyTextInputLayout extends android.support.design.widget.TextInputLayout {
public MyTextInputLayout(Context context) {
super(context);
}
public MyTextInputLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setError(@Nullable CharSequence error) {
super.setError(error);
View layout = getChildAt(1);
if (layout != null) {
if (error != null && !"".equals(error.toString().trim())) {
layout.setVisibility(VISIBLE);
} else {
layout.setVisibility(GONE);
}
}
}
}
그런 다음 setError(errorMessage);
또는setError(null);
반복되는 코드를 피하고 setError
메서드를 재정의 하기 위해 사용자 지정보기를 만듭니다 .
public class UserInputView extends TextInputLayout {
public UserInputView(Context context) {
this(context, null);
}
public UserInputView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public UserInputView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setError(@Nullable CharSequence error) {
boolean isErrorEnabled = error != null;
setErrorEnabled(isErrorEnabled);
super.setError(error);
}
}
TextInputLayout의 소스 코드는 다음을 표시합니다. 오류를 지우려면 다음을 사용하십시오.
til.setErrorEnabled(false);
이렇게하면 오류 텍스트가 숨겨지고 하단 공간이 표준 크기로 늘어납니다.
오류를 다시 설정해야하는 경우
til.setError("Your text");
til.setErrorEnabled(true)
오류 기능이 필요하다고 가정하면 자동으로 호출 됩니다.
다음 코드는 잘 작동합니다.
textInputLatout.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() < 1) {
textInputLayout.setErrorEnabled(true);
textInputLayout.setError("Please enter a value");
}
if (s.length() > 0) {
textInputLayout.setError(null);
textInputLayout.setErrorEnabled(false);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
mTextInputLayout.setErrorEnabled(false);
나는 사용 함으로써이 문제를 해결했습니다.
그런 다음 다음과 같이 재정의해야합니다.
@Override
public void onAnimationEnd(View view)
{
view.setVisibility(GONE); // <-- this is where you make it GONE
updateLabelVisibility(true);
}
또는 버튼이나 사용중인 모든 것을 시도해보십시오.
final Button btn = (Button) findViewById(R.id.btn);
btn.setVisibility(View.GONE); //<--- makes the button gone
'programing' 카테고리의 다른 글
Android 용 Kotlin. (0) | 2021.01.16 |
---|---|
Mac 10.9 이후 BREW 업데이트가 작동하지 않음 (0) | 2021.01.16 |
Windows (v10)에서 Android Studio를 완전히 제거하는 방법은 무엇입니까? (0) | 2021.01.16 |
double.ToString ()에서 소수점 기호를 변경하는 방법은 무엇입니까? (0) | 2021.01.16 |
이 인증서는 알 수없는 기관에서 서명했습니다. (0) | 2021.01.16 |