Das habe ich persönlich bei meinen früheren Jobs getan und wird auch durch zahlreiche andere Beispiele online bestätigt (siehe: SourceGraph-Codesuche).
Nachdem ich heute versucht habe, dieses Muster zu verwenden, war ich schockiert, als ich sah, dass der zurückgegebene Wert View.getWidth() keine Auffüllung enthält. Zur Veranschaulichung habe ich zwei Experimente durchgeführt:
Experiment 1: Programmgesteuert hinzugefügte Polsterung
activity_main.xml:
Code: Select all
[*] android:id="@+id/inner"
android:background="#ffffc0cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" />
Code: Select all
myList.forEach { s ->
val squareItemView = SquareItemView(this)
// irrelevant boilerplate omitted
innerContents.addView(squareItemView)
innerContents.post {
val baseWidth = innerContents.run { width - (paddingLeft + paddingRight) }
Log.i(
"TAG",
"innerContents.measuredWidth=${innerContents.measuredWidth}, " +
"innerContents.width=${innerContents.width}, " +
"baseWidth=${baseWidth}, " +
"innerContents.paddingLeft=${innerContents.paddingLeft}"
)
Log.i("TAG", "will add 10px px on either side")
innerContents.apply { setPadding(paddingLeft + 10, paddingTop, paddingRight + 10, paddingBottom) }
}
}
Code: Select all
23:42:49.923 I innerContents.measuredWidth=693, innerContents.width=693, baseWidth=693, innerContents.paddingLeft=0
23:42:49.923 I will add 10px px on either side
23:42:49.924 I innerContents.measuredWidth=693, innerContents.width=693, baseWidth=673, innerContents.paddingLeft=10
23:42:49.924 I will add 10px px on either side
23:42:49.924 I innerContents.measuredWidth=693, innerContents.width=693, baseWidth=653, innerContents.paddingLeft=20
23:42:49.924 I will add 10px px on either side
- die einfachen getMeasuredWidth- und getWidth-Zahlen identisch sind und konstant bleiben
- die Berechnung der „Basisbreite“ verringert sich um den Betrag des Abstands
activity_main.xml:
Code: Select all
Code: Select all
findViewById(R.id.texty).let {
it.doOnNextLayout {
Log.i("TAG", "texty.height=${it.height}, texty.paddingTop=${it.paddingTop}")
Log.i("TAG", "texty.width=${it.width}, texty.paddingLeft=${it.paddingLeft}")
}
}
Code: Select all
16:49:57.414 I texty.height=788, texty.paddingTop=0
16:49:57.414 I texty.width=788, texty.paddingLeft=0
Code: Select all
16:50:39.012 I texty.height=788, texty.paddingTop=26
16:50:39.012 I texty.width=788, texty.paddingLeft=26
Mobile version