以编程方式将 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
我知道,有很多这样的问题。我在 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