What's the difference between android:height and android:layout_height?
Question 1:
(what's the difference between them?):
All attributes starting with »layout_« are hints for the ViewGroup the View is part of. For this each android.view.ViewGroup
has a set of LayoutParams. The widget itself does not use them.
The android:height
parameter is the initial size of the android.view.View
. But if the View is part ViewGroup
then the ViewGroup
will resize the objet according to its layout rules.
BTW: newer APIs have a new android:minHeight
and android:maxHeight
attribute to clarify programmers intent.
Note that if you don't set android:height
the view will calculate the size itself. Which is right thing to do most of the time.
Question 2
(when should one be used over the other?):
ViewGroup
is abstract — the answer to this question depends which actual child class you are using.
Note that WRAP_CONTENT
tells the to use ViewGroup
to use android:height
. Which means that this is the correct parameter to be used in your example.
Question 3
(does the use of one affect the use of the other?):
Yes — and recursively . TableLayout will read and write the android:width
attribute to find out the widest object and resized all other object to it.
Question 4
(does the use of one have implications over other attributes which can control the measured dimensions of a view, like padding or margin?)
No for android:padding
but yes for android:layout_margin
. Note that margins are a layout parameter and not every layout manager supports margins.
See margin vs padding for details.
Final words:
It is easier to consider all width and height attributes to be hints only. The final say of the size of an object has the layout manager of the used ViewGroup
.