У меня есть следующий макет:
<com.google.android.material.textfield.TextInputLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:hint = "@string/vehicle_type"
android:layout_marginTop = "@dimen/layout_margin_default"
app:startIconDrawable = "@drawable/baseline_notes_24">
<com.google.android.material.textfield.TextInputEditText
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:inputType = "textMultiLine"/>
</com.google.android.material.textfield.TextInputLayout>
который выглядит так:
Моя цель состоит в том, чтобы startIcon оставался в верхней позиции:
Это возможно?
Я изучил варианты, которые можно использовать для TextInputLayout
, однако для startIcon
не нашелся вариант «гравитации».
Я не думаю, что это будет возможно. Помимо подкласса представления и выполнения чего-то там (не смотрел и не пробовал), я думаю, что лучшее, что вы можете сделать, это наложить представление на другое представление, которое содержит рисуемое и расположено сверху/слева.
Значок startIcon определяется CheckableImageButton
, надутым макетом design_text_input_start_icon.
Общедоступного API для его получения нет, но в качестве обходного пути вы можете использовать:
val textField = findViewById<TextInputLayout>(R.id.textfield)
val startIcon: CheckableImageButton =
textField.findViewById(com.google.android.material.R.id.text_input_start_icon)
val layoutParams = startIcon.layoutParams as LinearLayout.LayoutParams
layoutParams.apply {
gravity = Gravity.TOP or Gravity.LEFT
}
Интересный. Таким образом, TextInputLayout уже расширяет LinearLayout, поэтому для смещения рисуемого объекта не требуется дополнительная структура. К сожалению, однако, эти, казалось бы, простые манипуляции требуют знания внутренней структуры представления.