在 Android 開發中,ScrollView 內部包含大量控件時,底部新增元素導致頂部控件消失,是典型的佈局衝突問題。本文提供最簡潔的修復方案。
XML 佈局中,ScrollView 包裹一個垂直 LinearLayout,內含多個區塊(帳號登入、模式選擇、關於專業版、簡介等)。當最後一個 LinearLayout 的 marginTop 過大時,頂部的 my_account_login 會被擠出可視區域,甚至完全消失。
introduction_module 佈局的根視圖未設定 android:gravity="center",導致其內部元素靠頂對齊,配合巨大的外邊距,撐高了父容器高度,超出螢幕範圍後,ScrollView 只能向上截斷頂部內容。
在 introduction_module.xml 的根佈局(通常是 LinearLayout 或 RelativeLayout)上添加:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<!-- 子元素 -->
</LinearLayout>
設定 gravity="center" 後,該區塊內部元素垂直置中,外邊距不再單向疊加,ScrollView 能正確計算總高度,頂部控件不再被擠出。
ConstraintLayout 扁平化佈局,從根源避免測量衝突。