@@ -73,6 +73,7 @@ final class AndroidRenderer: Renderer {
7373 return nil
7474 }
7575 let viewObject = anyView. createAndroidView ( context)
76+ applyStackLayoutParams ( for: host. view, to: viewObject, in: parentView)
7677 // TODO: Determine order
7778 viewGroup. addView ( viewObject)
7879 if let transitioning = mapAnyView ( host. view, transform: { ( view: AndroidTransitioningView ) in view } ) {
@@ -233,6 +234,28 @@ final class AndroidRenderer: Renderer {
233234
234235private extension AndroidRenderer {
235236
237+ /// Assigns layout parameters to a child added to a stack's `LinearLayout`.
238+ ///
239+ /// Children without their own parameters hug their content, so the stack's alignment
240+ /// gravity can position them — Android's default of stretching children to match the
241+ /// parent's width would leave gravity with no room to act. Views conforming to
242+ /// `AndroidExpandingView` (such as `Spacer`) instead receive weighted parameters and
243+ /// grow to fill the remaining space along the stack's axis.
244+ func applyStackLayoutParams( for view: AnyView , to viewObject: AndroidView . View , in parentView: AndroidView . View ) {
245+ guard let linearLayout = parentView. as ( AndroidWidget . LinearLayout. self) else { return }
246+ let wrapContent = try ! JavaClass < ViewGroup . LayoutParams > ( ) . WRAP_CONTENT
247+ let isVertical = linearLayout. orientation == . vertical
248+ if mapAnyView ( view, transform: { ( view: AndroidExpandingView ) in view } ) != nil {
249+ let params = isVertical
250+ ? AndroidWidget . LinearLayout. LayoutParams ( wrapContent, 0 , Float ( 1 ) )
251+ : AndroidWidget . LinearLayout. LayoutParams ( 0 , wrapContent, Float ( 1 ) )
252+ viewObject. setLayoutParams ( params. as ( ViewGroup . LayoutParams. self) )
253+ } else if viewObject. getLayoutParams ( ) == nil {
254+ let params = AndroidWidget . LinearLayout. LayoutParams ( wrapContent, wrapContent)
255+ viewObject. setLayoutParams ( params. as ( ViewGroup . LayoutParams. self) )
256+ }
257+ }
258+
236259 /// Handler bound to the Android main looper, used to schedule reconciler updates.
237260 static let mainHandler = AndroidOS . Handler ( try ! JavaClass < AndroidOS . Looper > ( ) . getMainLooper ( ) )
238261
0 commit comments