以编程方式将 2+ 个文本字段并排放置在 LinearLayout(水平)中

Place 2+ Textfields side-by-side in a LinearLayout (horizontal) programmatically

我知道,有很多这样的问题。我在 Whosebug 和 google 上阅读了很多关于这个主题的内容,但没有任何帮助:(

好的,问题来了。我有一个小应用程序。在这个应用程序中,我有一个片段。此片段的 layout.xml 包含如下所示的占位符线性布局

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:id="@+id/placeholderLinLayout">
        </LinearLayout>

该片段有一个按钮。如果你点击它,一个 DialogFragmentPopup 打开,你可以输入一些数据。输入数据后,您可以单击此对话框上的另一个按钮,数据将被传输到主片段。在这里,我调用了一个方法,该方法应该以编程方式生成一个布局来呈现数据。我使用下面的代码

            myRoot = (LinearLayout) view.findViewById(R.id.placeholderLinLayout);
            innerLayout = new LinearLayout(view.getContext());
            innerLayout.setOrientation(LinearLayout.VERTICAL);
            innerLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

            LinearLayout productHeaderLayout = new LinearLayout(getContext());
            productHeaderLayout.setOrientation(LinearLayout.HORIZONTAL);
            productHeaderLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

            TextView product_header = new TextView(getContext());
            product_header.setText("Produkt");
            product_header.setLayoutParams(layoutParams);

            TextView amount_header = new TextView(getContext());
            amount_header.setText("Menge");
            amount_header.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
            amount_header.setLayoutParams(layoutParams);

            TextView packaging_header = new TextView(getContext());
            packaging_header.setText("Verpackung");
            packaging_header.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
            packaging_header.setLayoutParams(layoutParams);

            TextView price_header = new TextView(getContext());
            price_header.setText("Preis");
            price_header.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
            price_header.setLayoutParams(layoutParams);

            TextView payment_header = new TextView(getContext());
            payment_header.setText("Zahlart");
            payment_header.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
            payment_header.setLayoutParams(layoutParams);

            productHeaderLayout.addView(product_header);
            productHeaderLayout.addView(amount_header);
            productHeaderLayout.addView(packaging_header);
            productHeaderLayout.addView(price_header);
            productHeaderLayout.addView(payment_header);

            innerLayout.addView(productHeaderLayout);

问题是,第一个 textview 将所有其他 textview 推出可见 space,请参见屏幕截图

我想做的是,这 5 个文本视图自动展开到现有宽度。我 google 做了很多,这里的代码 post 是我在互联网上多次找到的结果。

所以我希望有人能帮助找出我代码中的问题:)

问候

将所有 TextView 布局参数设置为:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1f);

并从所有 TextView 中删除 .setWidth(ViewGroup.LayoutParams.MATCH_PARENT);

这将保证所有视图都设置相同的权重,并且该权重为 LinearLayout 中的所有视图提供相同的宽度(或高度,如果方向设置为垂直)。

问题是您将 TextView 的宽度设置为 MATCH_PARENT。因此,一个 TextView 占据了整个屏幕,而另一个则刚好从屏幕外开始。要解决此问题,请将布局参数宽度设置为 WRAP_CONTENT.

更好的是,如果你想传播它,你可以使用 LinearLayout 的权重 属性 这样它们就可以尽可能多地 space:

textview.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));

第三个参数1f是权重。一个权重意味着它将占用所有可用的 space 而不会干扰另一个 children,因此它们将全部均匀分布。

如果你想让你的 TextViews 并排,你必须将 LinearLayout 的方向设置为 horizontal 而不是 vertical