4

相対レイアウトで動的に設定されるビューで構成されるボードを動的に作成しています。私の onCreate では、すべてを作成する Board クラスのコンストラクターを呼び出します。

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
    RelativeLayout boardLayout = (RelativeLayout) findViewById(R.id.layoutBoard);
    board = new Board(this, boardLayout);

}

私の Board クラスでは、レイヤーのルールを設定し、表示するビューのサイズも設定する必要がありますboardLayout.getWidth()boardLayout.getHeight()

ここでの問題は、画面上のすべての実際の描画が onCreate メソッドの終了後にのみ実行されるため、作成の瞬間にレイヤーの幅と高さがゼロになることです。

そこで、次を使用してサイズを設定することにしました。

    boardLayout.addOnLayoutChangeListener(new RelativeLayout.OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View v, int left, int top, int right,
                int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                board.setParentLayoutSize(left, top, right, bottom);
        }
    });

残念ながら、このメソッドは API 11 からのみ利用可能であり、最大で API 10 に固執する必要があります。どうすればこれを実行できますか? この方法を使わずにレイアウトの変更を聞く方法はありますか?

ありがとうございました!

4

2 に答える 2

4

最も洗練された解決策は、RelativeLayout クラスを拡張することです。その後、onSizeChanged をオーバーライドできます。

protected void onSizeChanged (int w, int h, int oldw, int oldh)

膨張直後にサイズを知る必要がある場合は、ビューを手動で測定することができます。そのため、layout(...) よりも measure(...) を呼び出してから、getMeasuredWidth()/getMeasuredHeight が正しいサイズを返す必要があります。しかし、これはよりトリッキーです。どのように機能するか分からない場合は使用しないでください。

于 2013-01-18T12:38:08.243 に答える
1

何も見つからない数時間後、私はこのメッセージを書き、すぐにこれを発見しました: ビューの寸法を取得する方法は?

于 2013-01-18T11:48:46.207 に答える