Получение значения атрибута, объявленного в XML перед надуванием ⇐ Android
-
Anonymous
Получение значения атрибута, объявленного в XML перед надуванием
Я создаю пользовательскую кнопку MyButton, расширяющую MaterialButton. Вариант использования заключается в том, что существует два размера кнопки: большой и маленький. Большая кнопка будет иметь полную ширину (аналогично match_parent) и маленькая кнопка будет иметь некоторую minWidth, скажем, 100dp, и, что наиболее важно, у них будут разные отступы и разные размеры текста. При написании своего пользовательского класса для MyButton как я могу проверить, какие layout_height и layout_width упомянуты в xml, чтобы я мог предпринять соответствующие действия для установки правильный интерфейс?
Я пытаюсь получить высоту и ширину представления, но они будут равны 0, потому что к тому времени они еще не полностью сформированы. Я также пробовал использовать doOnLayout{ , но он также не вызывается в классе MyButton. Я также попробовал пользовательские атрибуты для button_size и на основе этого установил параметры макета, но тоже не сработало.
Итак, Я надеюсь, что смогу каким-то образом получить то, что объявлено в xml (в основном layout_width), чтобы я мог соответствующим образом обновить другое свойство.
например
откройте конструктор класса MyButton @JvmOverloads( контекст: Контекст, частный набор атрибутов val: AttributeSet? = ноль, частный val styleAttribute: Int = com.google.android.material.R.attr.materialButtonStyle) : MaterialButton (контекст, атрибутSet, styleAttribute) { в этом{ атрибутSet?.let { parseAttr(it) } } частное развлечение parseAttr(attr: AttributeSet) { if (/* необходимо проверить, равна ли объявленная ширина_макета match_parent*/){ // устанавливаем отступы и стиль текста } еще { // устанавливаем другие отступы и стиль texy } } }
Я создаю пользовательскую кнопку MyButton, расширяющую MaterialButton. Вариант использования заключается в том, что существует два размера кнопки: большой и маленький. Большая кнопка будет иметь полную ширину (аналогично match_parent) и маленькая кнопка будет иметь некоторую minWidth, скажем, 100dp, и, что наиболее важно, у них будут разные отступы и разные размеры текста. При написании своего пользовательского класса для MyButton как я могу проверить, какие layout_height и layout_width упомянуты в xml, чтобы я мог предпринять соответствующие действия для установки правильный интерфейс?
Я пытаюсь получить высоту и ширину представления, но они будут равны 0, потому что к тому времени они еще не полностью сформированы. Я также пробовал использовать doOnLayout{ , но он также не вызывается в классе MyButton. Я также попробовал пользовательские атрибуты для button_size и на основе этого установил параметры макета, но тоже не сработало.
Итак, Я надеюсь, что смогу каким-то образом получить то, что объявлено в xml (в основном layout_width), чтобы я мог соответствующим образом обновить другое свойство.
например
откройте конструктор класса MyButton @JvmOverloads( контекст: Контекст, частный набор атрибутов val: AttributeSet? = ноль, частный val styleAttribute: Int = com.google.android.material.R.attr.materialButtonStyle) : MaterialButton (контекст, атрибутSet, styleAttribute) { в этом{ атрибутSet?.let { parseAttr(it) } } частное развлечение parseAttr(attr: AttributeSet) { if (/* необходимо проверить, равна ли объявленная ширина_макета match_parent*/){ // устанавливаем отступы и стиль текста } еще { // устанавливаем другие отступы и стиль texy } } }
Мобильная версия