In terms of measuring children twice, it’s my understanding that this is what happens with LinearLayouts particularly when weights are involved. The best explanation I’ve found for this comes from RomainGuy in one of his presentations.
He has a slide about this and briefly speaks to it at 17:45. Feel free to rewind to get a bit of context though. You can find the video I’m referencing here: Devoxx’10 – Dive Into Android
Basically what he says is that on the first pass they calculate the total width or height depending on orientation of the LinearLayout, add the weights of the children, and find out how much space is left over, then on the second pass with that information they are able to properly divvy out all the remaining space to all the children. Simple enough.
I’d also like to point out though that yes, while it’s very true that shallow layout hierarchies have less of a performance hit, if you are adding just 1 or 2 extra layers, you probably aren’t going to see a big performance impact for the user. Once it’s laid out, it’s done. Even in ListView’s if you properly use the given “convertView”, and set up ViewHolder’s, you’re going to get good performance.
I’d encourage you to use DDMS and do a layout dump of some of Google’s apps. They are very complex, and often times surprisingly deep, but they still get good performance. Don’t be stupid with your layouts, but if it saves you time, adding an extra layout isn’t the end of the world.