Как сделать сообщение об ошибке в TextInputLayout появляться в центре

В настоящее время он выглядит так, как показано в этом макете:

<android.support.design.widget.TextInputLayout android:id="@+id/layoutCurrentPW" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" app:errorEnabled="true"> 

Как установить сообщение об ошибке «пароль должен быть не менее 8 символов», чтобы центрировать гравитацию?
Я пробовал с android: gravity = "center", но это не сработало.

Введите описание изображения здесь

РЕДАКТИРОВАТЬ
Макет, который включает EditText:

 <android.support.design.widget.TextInputLayout android:id="@+id/layoutCurrentPW" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" app:errorEnabled="true"> <EditText android:id="@+id/editTextCurrentPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:gravity="center" android:hint="@string/current_password" android:inputType="textPassword" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/black" /> </android.support.design.widget.TextInputLayout> 

Я хотел знать, есть ли способ обработать его из фреймворка. Нет.

Но способ TextInputLayout:
подсказка будет показана поверх EditText, когда пользователь ее коснется.
Сообщения об ошибках будут показаны только под TextInputLayout и выровнены для начала.

У меня было 40dp of left_margin для моего EditText, из-за которого несогласованность между подсказкой и сообщением об ошибке. Итак, на данный момент я удалил left_margin 40dp из EditText и применил его к самому TextInputLayout, так что теперь он выглядит нормально.

Извлеченный урок 🙂 – если какие-либо поля должны быть применены к EditText, то лучше, если это возможно, можно применить к TextInputLayout, чтобы они отображали подсказки и сообщения об ошибках.

Здесь решение, которое всегда центрирует errormessage независимо от того, насколько большой ваш TextInputLayout.

Вы создаете собственный класс, который наследуется от TextInputLayout . Затем переопределите метод ShowError (текстовый текст, способ рисования). Если ошибка вызывается, вы центрируете textView с ошибкой.

  public class TextInputLayout_Center : TextInputLayout { public override void ShowError(string text, Android.Graphics.Drawables.Drawable icon) { base.ShowError(text, icon); centerErrorMessage(this); } void centerErrorMessage(ViewGroup view) { for (int i = 0; i < view.ChildCount; i++) { View v = view.GetChildAt(i); if (v.GetType() == typeof(TextView)) { v.LayoutParameters = new LayoutParams(ViewGroup.LayoutParams.MatchParent, v.LayoutParameters.Height); ((TextView)v).Gravity = GravityFlags.CenterHorizontal; ((TextView)v).TextAlignment = TextAlignment.Center; } if (v is ViewGroup) { centerErrorMessage((ViewGroup)v); } } } } 

Я достиг этого, установив начальное поле для представления ошибки. Ниже вы можете увидеть мою переопределенную версию метода setError компонента TextInputLayout .

 @Override public void setError(@Nullable CharSequence errorText) { // allow android component to create error view if (errorText == null) { return; } super.setError(errorText); // find this error view and calculate start margin to make it look like centered final TextView errorTextInput = (TextView) findViewById(R.id.textinput_error); errorTextInput.measure(0, 0); int errorWidth = errorTextInput.getMeasuredWidth(); int layoutWidth = getWidth(); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) errorTextInput.getLayoutParams(); params.setMarginStart((layoutWidth - errorWidth) / 2); errorTextInput.setLayoutParams(params); } 
Intereting Posts
Вкладки панели действий не заполняют экран в андроиде Каковы инструменты для создания SDK для Android, инструменты для платформы и инструменты? И какую версию следует использовать? Используйте другую версию CodeCode для отладки / выпуска android gradle build Лучшая практика Qt / QML Android для отправки пользовательского намерения (общий URL) Android-студия с трансмиссией ExpandableListView – как установить разделитель только между родительскими элементами Нужна IDE для разработки Android NDK + SDK Libgdx – как добавить фоновое изображение в сцену? Настраивать эмуляцию / ориентацию устройства программно в контрольно-измерительном тесте Android WebBrowser прокручивает вниз страницу Применить дизайн материала Touch Ripple к ImageButton? Как запустить приложение C ++ в Android SHELL ReferenceError: камера не определена Сходства с Android-разработками MonoDroid Android: просмотр видео: как воспроизвести видео на петле