-1

したがって、2 つのカスタム ビューがあります。カスタムビューのピクセル寸法を知る必要があり、次の方法で取得しました:

    protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
    {
        width_dimension = xNew; // << this is the field i need to share
        super.onSizeChanged(xNew, yNew, xOld, yOld);
    }

フィールド「width_dimension」を渡す必要がある別のカスタムビューがあります。これを行う適切な方法は何ですか?アクティビティの onCreate() メソッドで情報を渡そうとしましたが、カスタム ビューの onSizeChanged() の前に呼び出されるため、フィールドは未定義です。私も onSizeChanged() メソッド (上記) を渡そうとしましたが、私の OTHER カスタム ビューはまだ xml レイアウトによってインスタンス化されていません (null ポインター例外がスローされました)。

onSizeChanged() メソッドをオーバーライドすることは、ビューの幅を決定する適切な方法ですか (xml で wrap_content に設定されています)? また、この情報を別のカスタム ビューと共有するにはどうすればよいですか?

この質問が明確でない場合は申し訳ありません。説明するのは難しく、私が直面している問題は、すべてのカスタム ビューがいつインスタンス化されてレイアウトされたのかを知る必要があるため、それらの間でディメンション情報 (実行時に決定される) を交換できることです。

4

1 に答える 1

0

ディメンションを使用できます。こちらをご覧ください:http ://developer.android.com/guide/topics/resources/more-resources.html#Dimensionは、カスタムビューがxmlに実装されている場合に役立ちます。また、ディメンションをロードすることもできます。このようなコード:

Resources res = context.getResources(); // you can use application or activity context for this
float customWidth = res.getDimension(R.dimen.custom_width);

お役に立てば幸いです。

編集

したがって、これが役に立ったようです。

yourlayout.getViewTreeObserver().addOnGlobalLayoutListener(ViewTreeObserver.OnGl‌​obalLayoutListener yourCustomListener); 

ビューが測定されて描画された後、コールバックが呼び出されます。また、無駄な呼び出しを避けるために、コールバックが呼び出されたら、ビューからリスナーを削除することをお勧めします。

于 2013-01-27T21:04:47.500 に答える