android button.getWidth()返回值0

时间:2014-05-21 18:12:44

标签: java android button

我动态创建按钮,我想将它们随机放在屏幕上。 为了做到这一点,我从屏幕的宽度中减去了按钮的宽度。 问题是,函数button.getWidth()总是返回0。

我在其他帖子中看到人们推荐使用

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    placeButtonsOnScreen();
 }

但即使我使用它,它也无法正常工作。

private void placeButtonsOnScreen() {

    Random r = new Random();

    LinearLayout layout = (LinearLayout) findViewById(R.id.ordered_buttons_layout);

    for (int i = 0; i < NUMBER_OF_BUTTONS; i++) {
        Button hiddenButton = buttonsArr[i];
        // Get random horizontal margin for the button
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        horizontalMargin = r
                .nextInt(SCREEN_WIDTH - hiddenButton.getWidth());
        layoutParams.setMargins(horizontalMargin, 50, 0, 0);
        // Add the button to the screen
        layout.addView(hiddenButton, layoutParams);
        Log.d("button width",String.valueOf(hiddenButton.getWidth()));
    }
}

任何想法如何定位屏幕上的按钮减去它们的宽度?现在,它们会从屏幕右侧的交叉处切断。

2 个答案:

答案 0 :(得分:1)

myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {

            myView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

           placeButtonsOnScreen();
        }
    });

答案 1 :(得分:0)

您应该使用RelativeLayouts并使按钮彼此相对定位(当然,最接近屏幕右侧的那个按alignToParentRight = true)