我动态创建按钮,我想将它们随机放在屏幕上。 为了做到这一点,我从屏幕的宽度中减去了按钮的宽度。 问题是,函数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()));
}
}
任何想法如何定位屏幕上的按钮减去它们的宽度?现在,它们会从屏幕右侧的交叉处切断。
答案 0 :(得分:1)
myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
placeButtonsOnScreen();
}
});
答案 1 :(得分:0)
您应该使用RelativeLayouts并使按钮彼此相对定位(当然,最接近屏幕右侧的那个按alignToParentRight = true)