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

时间:2018-08-25 19:17:22

标签: android layout android-linearlayout

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

好,这是问题所在。我有一个小应用。在这个程序中,我有一个片段。该片段的layout.xml包含一个占位符linearlayout,如下所示:

        <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推出可见空间,请参阅屏幕截图

enter image description here

我想做的是,这5个textview自动分散到现有宽度。我在Google上搜索了很多,在这里发布的代码就是我在互联网上多次发现的结果。

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

问候

3 个答案:

答案 0 :(得分:2)

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

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

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

这将确保为所有视图设置相同的权重,并且权重使LinearLayout中的所有视图具有相同的Width(如果将方向设置为Vertical,则为Height)。

答案 1 :(得分:0)

问题是您将TextView的宽度设置为MATCH_PARENT。因此,一个TextView占据整个屏幕,而另一个则从整个屏幕开始。要解决此问题,请将layoutparam宽度设置为WRAP_CONTENT

更好的是,如果要传播它,则可以使用LinearLayout的weight属性,以便它们占用尽可能多的空间:

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

第三个参数1f是权重。权重为1表示它将占用所有可用空间,而不会干扰其他子项,因此它们将平均分布。

答案 2 :(得分:-1)

如果要并排放置TextView,则必须将LinearLayout的方向设置为horizontal,而不是vertical