我知道,有很多这样的问题。我在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推出可见空间,请参阅屏幕截图
我想做的是,这5个textview自动分散到现有宽度。我在Google上搜索了很多,在这里发布的代码就是我在互联网上多次发现的结果。
所以我希望有人可以帮助我找出代码中的问题:)
问候
答案 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