重量和和方形

时间:2015-01-24 11:55:57

标签: android view android-layout-weight

我有LinearLayout,其中包含两个Button小部件layout_weight=1。取决于Button的文字或屏幕分辨率的长度,我得到矩形(灰色矩形)的按钮,但我需要保留方形(蓝色方块) enter image description here

我试图在height方法中更改LinearLayout param的onStart(),取决于Button' s width,但是{{1 }}返回getWidth()。我明白这是因为当时的观点仍未呈现。请帮我解决问题。

3 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标。如果您需要找到元素的实际宽度,您可以:

1)将OnGlobalLayoutListener附加到视图的ViewTreeObserver(但请记住在完成后将其删除)

2)或者您可以手动衡量您需要的内容:

 if(view.getMeasuredHeight() == 0){
    WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics metrics = new DisplayMetrics();
    manager.getDefaultDisplay().getMetrics(metrics);
    view.measure( metrics.widthPixels, metrics.heightPixels );
 }
 int realHeight = view.getMeasuredHeight();
 //...your code

答案 1 :(得分:0)

你是完全正确的,因为在那时候不会绘制视图,所以你必须使用viewtreeobserver:

像这样:

        final ViewTreeObserver treeObserver = viewToMesure
                .getViewTreeObserver();

        treeObserver
                .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

                    @Override
                    public void onGlobalLayout() {
                        // TODO Auto-generated method stub
                        System.out.println(viewToMesure.getHeight()
                                + "SDAFASFASDFas");
                        heith = viewToMesure.getHeight();


                    }
                });

在根据您计算的视图创建视图后,将调用此视图树观察器,您可以更改。

答案 2 :(得分:-2)

您可以使用自定义视图通过覆盖onMeasure将视图的高度设置为与其宽度相同:

public class SquareButton extends Button {

    public SquareButton (Context context) {
        super(context);
    }

    public SquareButton (Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareButton (Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
    }
}

您只需使用xml布局中的自定义按钮,即可在活动中执行任何操作:

<com.package.name.SquareButton
    android:layout_with="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />