Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

<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_... для раскрывающегося списка, например, пример адаптера ниже

@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);
}

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