0

カスタム ビューの幅に特定のサイズを設定しようとすると問題が発生します。layout_widthファイルのフィールドに値をハードコーディングできることはわかっていXMLますが、値をハードコーディングしないようにしています。View画面の半分のサイズにする必要があります。だから、class私は画面サイズの半分を見つけます:

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    try{
        Point size = new Point();
        display.getSize(size);
        screenWidth = size.x;
    }catch(NoSuchMethodError e){
        screenWidth = display.getWidth();
    }

次に、次のように呼び出します。

 measure(width|MeasureSpec.EXACTLY, LayoutParams.WRAP_CONTENT|MeasureSpec.EXACTLY);
 //Where width is equal to half the screen width

しかし、これは私の場合はうまくいかないようです。では、すべてをまとめると、カスタムの特定のサイズを適切に指定するにはどうすればよいでしょViewうか? どんな助けも役に立ち、感謝します!ありがとう!

4

2 に答える 2

0

カスタム ビューでメソッドをオーバーライドonMeasure()します。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = getResources().getDisplayMetrics().widthPixels >> 1;
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

基本的に、幅をオーバーライドしMeasureSpecて画面の幅のちょうど半分にし、それをスーパークラスに渡します。

于 2013-04-18T00:32:38.830 に答える