Kotlin Extension Solution
Вы можете добавить такую переменную расширения для каждой конкретной стороны.
inline var View.topPadding: Int
get() = paddingTop
set(@Px value) = setPadding(paddingLeft, value, paddingRight, paddingBottom)
// Then call
myView.topPadding = 10 // px
Если вы хотите использовать dp
вместо px
, добавьте что-то вроде этого:
inline var View.rightPaddingDp: Float
get() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, paddingRight.toFloat(), resources.displayMetrics)
set(value) {
val rightPx = resources.displayMetrics.density * value
setPadding(paddingLeft, paddingTop, rightPx.toInt(), paddingBottom)
}
myView.rightPaddingDp = 10 // dp
Чтобы обработать horizontal
или vertical
, сделайте что-нибудь вроде этого. Обратите внимание, что результат получения не имеет смысла, поэтому вы можете отключить его.
inline var View.horizontalPadding: Int
get() = throw UnsupportedOperationException("No getter for property")
set(@Px value) = setPadding(value, paddingTop, value, paddingBottom)
Чтобы использовать start
или end
и правильно работать с языками RTL, вам нужно добавить это:
inline val View.isLtr get() = SDK_INT < 17 || layoutDirection == View.LAYOUT_DIRECTION_LTR
inline var View.startPadding: Int
get() = if (isLtr) paddingLeft else paddingRight
set(@Px value) {
val left = if (isLtr) value else paddingLeft
val right = if (isLtr) paddingRight else value
setPadding(left, paddingTop, right, paddingBottom)
}
Бонус: создайте эквивалент, который принимает res
. т.е. topPaddingRes
person
Gibolt
schedule
30.08.2020