Высота измерения контейнера ошибок TextInputLayout

Привет, мне нужно сделать макет, как показано ниже, отредактированный текст должен быть в TextInputLayout чтобы иметь ошибку и плавающие подсказки, а прядильщик справа должен иметь подчеркивание. Мой вопрос заключается в том, как это сделать, потому что, когда я добавляю EditText в TextInputLayout есть дополнение, и оба подчеркивания находятся не в одной строке. Можно ли как-то измерить эту высоту контейнера ошибки? Введите описание изображения здесь

Таким образом, есть две возможности сделать это:

  1. Установите errorEnabled как false и создайте собственный TextView с текстом ошибки.
  2. Добавьте дополнительный невидимый TextView в нижнюю часть второго представления со стилем и размером шрифта, который можно найти в конструкторе TextInputLayout . Я не использую этот метод, но в моем случае это 12 ср.

Это обычная проблема, и я должен был заниматься с тобой только на днях. Вы всегда можете взглянуть на измерения на руководящие принципы здесь, а не на необходимость изучения кода.

Что касается создания спиннер-спички, вы можете начать с добавления фона, подобного этому

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="-1dp" android:left="-1dp" android:right="-1dp" android:bottom="1dp" > <shape android:shape="rectangle"> <padding android:top="4dp" android:bottom="4dp" /> <stroke android:width="1dp" android:color="@color/my_grey"/> </shape> </item> </layer-list> 1 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="-1dp" android:left="-1dp" android:right="-1dp" android:bottom="1dp" > <shape android:shape="rectangle"> <padding android:top="4dp" android:bottom="4dp" /> <stroke android:width="1dp" android:color="@color/my_grey"/> </shape> </item> </layer-list> 1 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="-1dp" android:left="-1dp" android:right="-1dp" android:bottom="1dp" > <shape android:shape="rectangle"> <padding android:top="4dp" android:bottom="4dp" /> <stroke android:width="1dp" android:color="@color/my_grey"/> </shape> </item> </layer-list> 1 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="-1dp" android:left="-1dp" android:right="-1dp" android:bottom="1dp" > <shape android:shape="rectangle"> <padding android:top="4dp" android:bottom="4dp" /> <stroke android:width="1dp" android:color="@color/my_grey"/> </shape> </item> </layer-list> 

Вероятно, вы захотите добавить android:padding="0dp" в Spinner и вместо того, чтобы использовать один из simple_... макетов, которые добавляют дополнение, которое не соответствует EditText, возвращают обычный TextView, поскольку ваше представление возвращается из адаптера, но Продолжайте использовать simple_... макет simple_... для раскрывающегося списка, например, пример адаптера ниже

 @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { //convertView = mInflater.inflate(R.layout.support_simple_spinner_dropdown_item, parent, false); convertView = new TextView(parent.getContext()); } //if you want to mimick the floating hint behaviour from the edit text, //you can animate the label visibility here return populateView(position, convertView, parent); } private View populateView(int position, View convertView, ViewGroup parent) { // in here set your values as you usually would return convertView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.support_simple_spinner_dropdown_item, parent, false); } return populateView(position, convertView, parent); } 

Теперь при условии, что вы набрали поля EditText и Spinner, они выстраиваются в линию. Хотя в некоторых макетах мне нужно установить android:layout_marginTop="0dp" на Spinner