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