【问题标题】:Android LinearLayout in ScrollView滚动视图中的 Android 线性布局
【发布时间】:2015-03-18 10:05:06
【问题描述】:

我试图在这样的 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" />

【问题讨论】:

  • 从 LinearLayout.HORIZONTAL 切换到 VERTICAL 并为 TextView 的布局添加权重。就是这样;)
  • 或者更好更简单,只用线性布局和你的两个元素创建一个布局文件,使用inflater加载这个资源。然后您可以使用 AndroidStudio 中的 GUI 设计器。
  • 但是 VERTICAL 是从上到下的意思,我希望 HORIZONTAL 从左到右,或者这不是事实吗?我尝试了一下,我得到了相同的结果,行之间没有空格......
  • 您要将 LinearLayouts 添加到 (frg_layout) 中的 ViewGroup 是什么?最好看看它是什么类型,它是如何定义的,它的布局参数是什么等等。
  • 什么时候在android布局上创建设计使用xml非常简单的设计方式

标签: android scrollview android-linearlayout


【解决方案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 从左到右,或者这不是事实吗?我试了一下,我得到了相同的结果,行之间没有空格......
  • 哦 k 更改 layoutParams match_parent 像 250dp 因为 match_parent 使用在布局上获得完整空间
【解决方案2】:

我认为你基本上是正确的,只需要一些小的调整:

 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...!如果我正确阅读了您的代码,它应该是相反的吗?!
  • ?等一下,不,不对,2表示应该更大!现在我很困惑。
  • 这是不正确的。要求是绿色视图包装内容,红色视图占用剩余空间。 Red 视图的 Width 0 + Weight 1 和 Green 视图的 Width wrap_content + Weight 0 是正确的配置。其他东西破坏了测量。
  • 嗯。那么我不确定可能是什么问题。我通常在 XML 中完成所有这些操作,所以我完全有可能搞砸了。
  • 是的,我也很困惑!! @GilMoshayof 你是对的
【解决方案3】:

将 LayoutInflater 与 xml 一起使用将带来解决方案!

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多