gpt4 book ai didi

java - 安卓重力问题

转载 作者:太空狗 更新时间:2023-10-29 16:24:36 24 4
gpt4 key购买 nike

我一直在尝试将这个自定义 View 居中放置在另一个扩展了 LinearLayout 的自定义 View 中。这一切都需要通过代码来完成,因为它们都是在运行时完成的。

我尝试了设置重力的标准方法:

this.setGravity(Gravity.CENTER);

这是在我扩展 LinearLayout 的类中完成的。

我也尝试过 LayoutParams 方法:

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
block.setLayoutParams(params);
this.addView(block);

这是在我将 block 添加到 View 的地方完成的(如您所见)。

这两种方法都导致 block 仍然在我的 View 的左上角对齐。我还有哪些其他选择,或者更重要的是,我究竟做错了什么?

最佳答案

也尝试设置布局权重:

LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_HORIZONTAL;
params.weight = 1;
this.addView(block, params);

这(假设您的方向是垂直的)将允许您的 View 填充线性布局中的剩余空间并且应该水平居中。

我认为没有办法让 subview 小于包含它的 LinearLayout 单元格。如果 View 小于其“单元格”,则 LinearLayout 将缩小以容纳它。如果布局权重导致“单元格”增长,那么包含的 View 也会增长。

如果您确实希望 View 小于其“单元格”并居中,请将其包装在 FrameLayout 中。然后,您将能够随心所欲地使用重心。layout_width="fill_parent"在 xml 中(我知道你不能直接使用它,但这样解释更容易):

<LinearLayout orientation="vertical">
<FrameLayout layout_weight="1" layout_height="wrap_content">
<View layout_gravity="center" layout_{width,height}="wrap_content"/>
</FrameLayout>
... other views ...
</LinearLayout>

未标记的布局属性是“fill_parent”。

关于java - 安卓重力问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5307865/

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