請查看此xml佈局。由其父母剪裁的完整尺寸的Android視圖
<LinearLayout android:id="@+id/dataTableContainer"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clipChildren="true">
<LinearLayout android:id="@+id/dataTable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</LinearLayout>
在運行時,「dataTable」元素填充的子元素比「dataTableContainer」可以顯示的要寬。然而,當我在eclipse中檢查兩個元素的mMeasuredWidth(或者甚至是getWidth()的返回值)時,它們變得完全相同。這不應該是這樣。我的理解是,「dataTable」的孩子應該通過「wrap_content」設置來推動它自己的寬度。相反,「dataTableContainer」應該小於此值,因爲它的「fill_parent」設置受到屏幕大小的限制。
我也嘗試將「clipChildren」設置爲false,以防萬一寬度被容器剪裁但結果保持不變:表和容器的寬度都相同。
任何人都可以解釋發生了什麼?
爲了給你一些背景,我想要做的是收集這些元素的大小,以確定有多少「dataTable」元素位於容器外側,因此看不到。這又需要限制用戶可以拖動表格元素的距離。 ScrollView元素本身限制了運動,但是因爲我使用的是LinearLayout,所以我需要複製該限制功能。
內部'LinearLayout'不能大於外部大小,因此寬度相等似乎是合理的。你真的需要根元素是一個'LinearLayout'嗎?你可以在'ScrollView'中包裝dataTableContainer嗎? – acj
感謝您的評論@acj。我認爲假設內部元素不能大於外部元素是很安全的。當然,它不能,但在內部,我會認爲渲染引擎知道(並存儲在某處)內部元素想要更大但被外部元素剪切。因此,我期望測量的寬度與getWidth()返回的值之間存在差異。 – manu3d
要回答你的問題@acj,我不能使用ScrollView,因爲我試圖創建一個簡單的2D ScrollView,一個可以水平和垂直滾動的滾動視圖。我已經看到了解決方案,但他們似乎有點矯枉過正,我需要做的事情。拖動內部元素已經工作,但我不知道如何限制它的運動,使它不會離開屏幕! – manu3d