ScrollView中的Android LinearLayout

ScrollView中的Android LinearLayout,android,scrollview,android-linearlayout,Android,Scrollview,Android Linearlayout,我尝试在滚动视图中获得线性布局,如下所示: 绿色空间应为包裹内容,红色空间应占据剩余空间 但这是我的结果: 这是我的代码: foreach(Ele el : elements) {} LinearLayout layout = new LinearLayout(getActivity()); LayoutParams layout_parm = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTEN

我尝试在滚动视图中获得线性布局,如下所示:

绿色空间应为包裹内容,红色空间应占据剩余空间

但这是我的结果:

这是我的代码:

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" />

您可以更改布局方向

 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>

我认为您基本上是对的,只需要一些小的调整:

 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布局,我认为它通常更干净,但在编程上应该大致相同。

将LayoutInflater与xml结合使用将带来解决方案


谢谢大家!

从LinearLayout.HORIZONTAL切换到VERTICAL,并为TextView的布局添加权重。就这样;)或者更好、更简单,创建一个仅包含线性布局和两个元素的布局文件,使用充气器加载此资源。然后你可以使用AndroidStudio的GUI设计。但是垂直意味着从上到下,我希望从左到右水平,或者这不是事实吗?我尝试了一下,得到了相同的结果,行与行之间没有空格…要将线性布局添加到的视图组是什么(frg_布局)?最好看看它是什么类型,它是如何定义的,它的布局参数是什么,等等。当r在android布局上创建设计时,使用xml是非常简单的设计方式,但是垂直是从上到下,我希望从左到右水平,或者这不是事实吗?我尝试了一下,我得到了相同的结果,行与行之间没有空格…哦,k更改布局参数match_parent,比如250dp,因为match_parent在布局上使用获取全部空间。现在红色框获取1/3的空间,绿色框获取2/3。。。!如果我读对了你的代码,应该是相反的?!?等一下,不,那不对,2表示它应该更大!现在我很困惑,这是不正确的。要求是绿色视图包装内容,红色视图占用剩余空间。红色视图的宽度0+权重1和绿色视图的宽度包装内容+权重0是正确的配置。还有别的东西打破了测量。那么,我不确定是什么问题。我通常用XML来做这些,所以我完全有可能把事情搞砸了。是的,我也很困惑@吉尔莫沙:你们都是对的