簡體   English   中英

Java Android:在顯示之前預處理UI

[英]Java Android: Pre-processing the UI before it displays

首先,我已經多年來一直在閱讀這個網站,它幫助我多次幫助我,所以謝謝你們這里的社區貢獻者,希望你們可以幫助我解決我自己的問題。

我剛剛開始在我的公司進行Android開發,並且我正在嘗試將現有的應用程序從Windows Mobile C#移植到Android Java。 其中大部分進展順利,但我遇到一些困難的一個領域是用戶界面。

創建WinForm時,Windows Mobile應用程序從文件中讀取調查規范。 對於封閉式問題(例如多選),我需要使用CheckBox或RadioButton控件為規范中的每個適用答案填充屏幕。 創建所需的布局和控件沒有問題,但我們還要求屏幕不滾動。 因此,我們的軟件需要能夠在顯示之前計算出可用屏幕空間內的最佳擬合而不會溢出(即1-4列用於顯示)

我已經將我的UI(至少是布局)編寫為XML資源或Java代碼,但是因為像GetWidth()和GetHeight()這樣的方法在onCreate()中返回0,所以我還沒有能夠添加這個必需的pre - 處理。

所有這些都需要在屏幕顯示之前發生。 如果有人能指出我正確的方向,我將非常感激。

當Android從布局構建UI時,布局的根要求所有孩子通過調用onMeasure()來報告他們想要的大小。 它確實是一種自下而上的遞歸方式。 如有必要,父視圖將設置子項的大小以使它們適合。 如您所見,在onCreate()期間未完成此測量過程。

嘗試全局布局偵聽器。

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);

     // inflate your main layout here (use RelativeLayout or whatever your root ViewGroup type is
     LinearLayout mainLayout = (LinearLayout ) this.getLayoutInflater().inflate(R.layout.main, null); 

     // set a global layout listener which will be called when the layout pass is completed and the view is drawn
     mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
     new ViewTreeObserver.OnGlobalLayoutListener() {
          public void onGlobalLayout() {
               // measure your views here
          }
     }
 );

 setContentView(mainLayout);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM