如今有這樣一個佈局:android
1 <?xml version="1.0" encoding="utf-8"?> 2 3 <com.clientMenu.CustomScrollView 4 xmlns:android="http://schemas.android.com/apk/res/android" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:id="@+id/scrollview_new_from_history_menu" 8 > 9 10 <!-- android:fillViewport="true" --> 11 12 <RelativeLayout 13 android:layout_width="match_parent" 14 android:layout_height="match_parent" 15 android:id="@+id/relativeLayout_new_from_history_menu" 16 android:background="@drawable/blackboard"> 17 /> 18 19 </RelativeLayout> 20 21 22 23 </com.clientMenu.CustomScrollView>
一、在一個自定義的scrollView中加入一個相對佈局佈局
二、在程序跑起來的時候,又動態建立幾個EditTextgoogle
三、並且這幾個輸入框是支持拖拽的spa
如今問題來了,當我把輸入框控件拖動到一個位置後,若是去編輯另外一個輸入框,那麼當輸入法彈出的時候,整個佈局便又恢復移動前的樣子,見下邊的圖:3d
一、初始時的截圖code
二、如今移動「西紅柿牛腩飯」到另外一個位置xml
三、當編輯「西紅柿牛腩飯」的價格「24元」的時候,「西紅柿牛腩飯」又回到以前的位置blog
那麼爲何會出現這樣的問題呢?我想了好久,把問題定位在如下幾個點:遞歸
一、scrollView中對輸入法的響應過程utf-8
二、輸入法彈出的具體過程對佈局的影響
三、activity中控件是如何顯示在屏幕的
那麼爲何要加入一個自定義的scrollView呢?一是爲了在彈出輸入法的時候,底部的控件不被輸入法遮住;二是爲了可以自由控制scrollView能否滾動。
輸入法彈出是怎樣一個過程呢?查了stackOverflow和google開發者文檔都沒有特別描述這個過程的。
接下來,我把重點放在了繪製佈局的過程。在官網13.2節中是這樣的解釋的:
繪製佈局又兩個遍歷過程組成:測量過程和佈局過程
測量過程是由measure(int,int )方法來完成,該方法從上到下遍歷視圖樹。在遞歸遍歷中,每一個視圖都會向下層傳遞尺寸和規格。當measure方法遍歷結束時,每一個視圖都保存了各自的尺寸信息
佈局過程是由layout(int,int,int,int)方法完成,該方法也是由上而下遍歷視圖數,在遍歷過程當中,每一個父視圖經過測量過程的結果定位全部子視圖的位置信息。
時隔一週再更新一下。
以前的方案都沒有行的通,由於經過layout改變尺寸和位置信息後,沒有找到通知父佈局它的尺寸改變信息,因此我選用了另外一種方案:經過彈出窗口(contextMenu)來修改文字內容
經過這張截圖,能夠看到輸入法彈出的時候,沒有改變scrollview的佈局,因此就對整個relativeLayout的佈局沒有影響,在此基礎上進行文字修改便可。
總結一下:
一、一種思惟模式解決不了問題,要去換另外一種思惟模式來解決
二、多總結,觸類旁通。