gpt4 book ai didi

android - 如何在以编程方式添加到 LinearLayout 的按钮之间添加边距空间?

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

我在运行时将按钮添加到 LinearLayout(垂直方向)...

private void addButtons(String[] titles) {
for (String title : titles) {
Button button = ButtonBuilder.getButton(getActivity());
button.setText(title);
mButtonsLayout.addView(button);
}
}

每个按钮都有一个在 XML 中定义的样式。

<!-- styles.xml -->
<style name="Button">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:gravity">center</item>
<item name="android:layout_margin">8dp</item>
</style>

尽管我定义了 layout_margin,但所有按钮都没有任何间距地紧挨着放置。如何在它们之间添加边距空间?


按照nmw的建议,我正在尝试将父布局引入充气器。

private void addButtons(String[] titles) {
for (String title : titles) {
Button button = ButtonBuilder.getButton(getActivity(), mButtonsLayout);
button.setText(title);
mButtonsLayout.addView(button);
}
}

..

// ButtonBuilder.java
public static Button getButton(Activity activity, ViewGroup parent) {
return (Button)activity.getLayoutInflater().inflate(R.layout.custom_button,
parent);
}

这会导致异常..

java.lang.ClassCastException: android.widget.LinearLayout cannot be \
cast to android.widget.Button

最佳答案

由于在实例化时没有父 ViewGroup 而导致布局膨胀时,layout_margin 将被忽略。该框架无法创建布局参数,因为它不知道父 ViewGroup 类型。

要解决此问题,您可以:

1/ 也以编程方式创建布局参数,就在添加 View 之前,您可以在其中设置边距。

2/ 给getButton构建器添加一个ViewGroup参数,传入mButtonsLayout。然后,当您膨胀 XML 时,将其用作父 ViewGroup(inflate() 的最后一个参数)。

当使用方法 2/ inflate() 将返回 ViewGroup 而不是 View(在你的例子中是 Button),所以你需要使用 从 ViewGroup 中取出 Button parent.getChildAt(parent.getChildCount()-1).

参见 LayoutInflater docs用于膨胀。


编辑:

请注意,Builder 将不再用作 getButton() 方法。使用 ViewGroup 参数时,按钮会立即添加到父 View 。

public static Button addButton(Activity activity, ViewGroup parent) {
activity.getLayoutInflater().inflate(R.layout.custom_button, parent);
return (Button) parent.getChildAt(parent.getChildCount() - 1);
}

因此,您不能再在主类中添加 View 。

// mButtonsLayout.addView(button); // Remove this

否则会导致以下错误:

java.lang.IllegalStateException: The specified child already has a parent. \
You must call removeView() on the child's parent first.

关于android - 如何在以编程方式添加到 LinearLayout 的按钮之间添加边距空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141405/

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