五、輸入法彈出時佈局錯亂的解決方案

 

如今有這樣一個佈局: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的佈局沒有影響,在此基礎上進行文字修改便可。

 

總結一下:

一、一種思惟模式解決不了問題,要去換另外一種思惟模式來解決

二、多總結,觸類旁通。

相關文章
相關標籤/搜索