0

タイトルにあるように、レイアウト要素の幅を高さと等しくなるように設定しようとしています (親と一致するように設定されています)。高さパラメーターから幅パラメーターをプログラムで設定しようとしましたが、これは実際の高さではなく -1 として表示されます (親と一致するため)。サイズが動的な正方形のレイアウト要素を作成する方法を知っている人はいますか? ありがとう。

4

2 に答える 2

1

ですから、私がこのようなことのためにやってきたのは -- そして、それが理想的かどうかはわかりませんが、うまく機能しています -- useViewTreeObserver.OnGlobalLayoutListenerです。このようなもの:

View myView = findViewById(R.id.myview);
ViewTreeObserver observer = myView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new SquareLayoutAdjuster());

class SquareLayoutAdjuster 
        implements ViewTreeObserver.OnGlobalLayoutListener {
    @Override
    public void onGlobalLayout() {
        int dimension = myView.getHeight();
        LayoutParams params = myView.getLayoutParams();
        params.width = dimension;
        myView.setLayoutParams(params);
        observer.removeGlobalOnLayoutListener(this);
    }
}

それは単なる一般的な考え方です。そのままコンパイルできるかどうかはわかりませんが、基本的にonGlobalLayout()メソッドでは、ビューが測定されることが保証されています。最後にリスナーを削除して、複数回呼び出されるのを防ぎます (何らかの理由でそれが必要な場合を除きます)。

于 2012-07-11T18:43:58.543 に答える
0

KCOPPOCKの解決策は私にとってはうまくいきます、ありがとう。しかし、実行時に「java.lang.IllegalStateException: This ViewTreeObserver is not alive, call getViewTreeObserver() again」というメッセージが表示されました。だから私は使う findViewById(R.id.serie_main_layout).getViewTreeObserver().removeOnGlobalLayoutListener(this);

代わりは

observer.removeGlobalOnLayoutListener(this);

すべてが完璧に機能します。

于 2014-01-22T20:35:00.713 に答える