Держите startIcon в верхнем левом положении при использовании многострочного текстового просмотра

У меня есть следующий макет:

<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 не нашелся вариант «гравитации».

1
0
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не думаю, что это будет возможно. Помимо подкласса представления и выполнения чего-то там (не смотрел и не пробовал), я думаю, что лучшее, что вы можете сделать, это наложить представление на другое представление, которое содержит рисуемое и расположено сверху/слева.

Интересный. Таким образом, TextInputLayout уже расширяет LinearLayout, поэтому для смещения рисуемого объекта не требуется дополнительная структура. К сожалению, однако, эти, казалось бы, простые манипуляции требуют знания внутренней структуры представления.

Cheticamp 19.12.2022 20:13
Ответ принят как подходящий

Значок 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
    }

Другие вопросы по теме