gpt4 book ai didi

android - 相对布局获取宽度/高度返回 0

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:45 26 4
gpt4 key购买 nike

我需要获取相对布局的宽度和高度,但我不知道相对布局何时准备好为我提供这两个属性。我的 Activity 有几个选项卡,我在 inflater.inflate(R .layout.fragment_pizza, container, false);,但是它们都返回 0,所以它们显然还没有准备好。是否有类似 afterCreateView() 或类似的事件,我可以在其中调用这两个方法并获取实际的宽度和高度?

代码:

public class PizzaFragment extends Fragment {

private static final String TAG = "PizzaFragment";

private Controller controller;

private static final int BUTTON_WIDTH = 70;
private static final int BUTTON_HEIGHT = 20;

private static final int MARGIN_LEFT = 80;
private static final int MARGIN_BOTTOM = 30;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

controller = Controller.getInstance();
controller.loadProducts("pizza", getActivity().getApplicationContext());
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_pizza, container, false);

RelativeLayout layout = (RelativeLayout) view.findViewById(R.id.rl_order_pizza);
Log.d(TAG, "Width: " + layout.getWidth());
Log.d(TAG, "Height: " + layout.getHeight());

int currentX = 10;
int currentY = 10;

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(BUTTON_WIDTH, BUTTON_HEIGHT);


for (Product product: controller.getProducts("pizza")){

Button tempButton = new Button(getActivity());
tempButton.setId(product.getId());
tempButton.setText(product.getName());

if (layout.getWidth() < currentX + MARGIN_LEFT){
currentX = 10;
currentY = MARGIN_BOTTOM;

}
else{
currentX += MARGIN_LEFT;
}

Log.d(TAG, "CurrentY: " + currentY);
Log.d(TAG, "CurrentX: " + currentX);

layoutParams.leftMargin = currentX;
layoutParams.bottomMargin = currentY;

tempButton.setLayoutParams(layoutParams);

layout.addView(tempButton);
}

return view;

}
}

最佳答案

我的建议是在 onCreateView 中使用这样的全局布局监听器:

YOUR_LAYOUT_INSTANCE = view.findViewById(R.id.YOUR_LAYOUT_ID);

...

YOUR_LAYOUT_INSTANCE.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
// gets called after layout has been done but before display.
if (Build.VERSION.SDK_INT < 16) {
YOUR_LAYOUT_INSTANCE.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
YOUR_LAYOUT_INSTANCE.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
// get width and height
}
});

关于android - 相对布局获取宽度/高度返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19413268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com