Android中的ScrollView中的LinearLayout

3
我正在尝试在ScrollView中获取一个类似于这样的LinearLayout: 绿色区域应该是wrap_content,红色区域应该占据剩余空间。
但是我的结果是: 这是我的代码:
foreach(Ele el : elements) {}
    LinearLayout layout = new LinearLayout(getActivity());
    LayoutParams layout_parm = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    layout.setOrientation(LinearLayout.HORIZONTAL);
    layout.setLayoutParams(layout_parm);

    TextView tv = new TextView(getActivity());
    tv.setLayoutParams( new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1) );
    tv.setBackgroundColor(getActivity().getResources().getColor((R.color.red)));
    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
    tv.setText("Name...");
    tv.setPadding(0, 0, 0, getDP(5));
    layout.addView(tv);

    TextView iView = new TextView(getActivity());
    iView.setText("OTO");
    iView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
    iView.setBackgroundColor(getActivity().getResources().getColor((R.color.green)));
    iView.setLayoutParams( new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0) );
    layout.addView(iView);

    frg_layout.addView(layout); 
}

我很困惑!也许你可以帮我找出我的错误...谢谢!
父视图组:
<LinearLayout 
    android:id="@+id/frg_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:gravity="top"
    android:orientation="vertical" />

或者更好、更容易的方法是,只创建一个线性布局和两个元素的布局文件,使用充气筒加载此资源。然后您可以使用AndroidStudio的GUI设计器。 - Rene M.
但是VERTICAL意味着从上到下,我希望HORIZONTAL从左到右,这个事实不正确吗? 我尝试了一下,没有在行之间加空格,结果相同... - Flo
你正在将LinearLayout添加到哪个ViewGroup(frg_layout)中?最好能看到它的类型、如何定义以及其布局参数等信息。 - Gil Moshayof
再次,希望能看到它的所有配置 - 布局参数、方向等。 - Gil Moshayof
请问您能发布完整的布局吗?我只看到了LinearLayout,它应该被包含在ScrollView中,是吗?您编写的代码(尽管最好通过XML定义)应该做您所期望的事情,这意味着问题可能在您代码的其他地方。请尽可能发布相关的代码。 - Gil Moshayof
显示剩余7条评论
3个回答

1
你更改布局方向。
 LinearLayout layout = new LinearLayout(getActivity());
LayoutParams layout_parm = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(layout_parm);

请使用这种类型在 XML 中。
<LinearLayout 
 android:id="@+id/frg_layout"
 android:layout_width="match_parent"
 android:layout_height="wrap_content">

<TextView
android:id="@+id/TextView1"
android:layout_width="250dp"
android:layout_height="60dp"/>

<TextView
android:id="@+id/textview2"
android:layout_width="250dp"
android:layout_height="60dp"
/>
</linearlayout>

但是VERTICAL意味着从上到下,我希望HORIZONTAL从左到右,或者这个事实不正确吗?我尝试了一下,在行之间没有空格的情况下得到了相同的结果... - Flo
哦,把layoutParams改成match_parent,像250dp这样,因为match_parent可以在布局中占满全部空间。 - Jai

0

我认为你大部分都做得很对,只需要进行一些小的调整:

 for each(Ele el:elements){

        LinearLayout layout = new LinearLayout(getActivity());
        LayoutParams layout_parm = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        layout.setOrientation(LinearLayout.HORIZONTAL);
        layout.setLayoutParams(layout_parm);

        TextView tv = new TextView(getActivity());

        //adjust the last number here to make the first block wider or larger as you want
        tv.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 2));
        tv.setBackgroundColor(getActivity().getResources().getColor((R.color.red)));
        tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
        tv.setText("Name...");
        tv.setPadding(0, 0, 0, getDP(5));
        layout.addView(tv);

        TextView iView = new TextView(getActivity());
        iView.setText("OTO");
        iView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
        iView.setBackgroundColor(getActivity().getResources().getColor((R.color.green)));

        //adjust your layout param to be a weight instead of wrap_content
        iView.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
        layout.addView(iView);

        frg_layout.addView(layout);
    }

看看这是否有效!另一种方法是构建一个XML布局,我认为通常更清晰,但从程序上讲,它应该以大致相同的方式工作。


好的,现在红色框占据了1/3的空间,绿色框占据了2/3的空间...!如果我正确地理解了您的代码,那么应该是相反的吧?! - Flo
等一下,不对,2表示它应该更大!现在我很困惑。 - Matter Cat
这是不正确的。要求是绿色视图包裹内容,红色视图占据剩余空间。红色视图的宽度为0 + 权重1,绿色视图的宽度为wrap_content + 权重0是正确的配置。其他因素导致了测量错误。 - Gil Moshayof
嗯,我不确定问题可能是什么。通常我都是用XML来做这些事情,所以很有可能是我搞错了什么地方。 - Matter Cat
是的,我也感到困惑!!@GilMoshayof 你说得对。 - Flo

0

使用xml和LayoutInflater将带来解决方案!

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接