3

まず最初に、私はこのサイトを何年も読んでいて、何度か束縛から抜け出すのに役立っています。貢献してくれたここのコミュニティに感謝します。私自身の問題を解決してくれることを願っています。

会社で Android 開発を始めたばかりで、既存のアプリケーションを Windows Mobile C# から Android Java に移植しようとしています。ほとんどの部分は順調に進んでいますが、UI については少し苦労しています。

Windows Mobile アプリケーションは、WinForm の作成時にファイルから調査仕様を読み取ります。選択式の質問 (多肢選択式など) の場合は、仕様内の該当する回答ごとに CheckBox または RadioButton コントロールのいずれかを画面に表示する必要があります。必要なレイアウトとコントロールを作成することは問題ありませんが、画面がスクロールしないという要件もあります。このため、私たちのソフトウェアは、表示される前に、利用可能な画面スペース内でオーバーフローすることなく (つまり、表示に使用される 1 ~ 4 列) 最適なフィットを計算できる必要があります。

UI (少なくともレイアウト) を XML リソースまたは Java コードの両方として記述しましたが、GetWidth() や GetHeight() などのメソッドが onCreate() で 0 を返すため、この必要な pre をまだ追加できていません。 -処理。

これはすべて、画面が表示される前に行う必要があります。誰かが私を正しい方向に向けることができれば、私は非常に感謝しています.

4

1 に答える 1

1

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);
于 2012-11-06T14:33:50.500 に答える