使用LayoutParams动态添加片段

use*_*321 4 android android-fragments

是否可以使用LayoutParams动态添加片段?我有两个片段要放在RelativeLayout中:一个应该锁定在左边.另一个应该锁定在右边.

sst*_*stn 6

我在LinearLayout中对ListFragment使用了以下方法:

class CustomListFragment
    extends ListFragment
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        ViewGroup v = (ViewGroup) super.onCreateView(inflater, container,
                savedInstanceState);
        v.setLayoutParams(new LinearLayout.LayoutParams(0,
                LinearLayout.LayoutParams.MATCH_PARENT, 1));
        return v;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我在另一个答案中阅读了你的评论,我发现它与你所考虑的相似.

但请注意:框架可能会实例化您的片段.因此,该类必须是公共的,并且必须具有没有任何进一步参数的构造函数.

因此,任何用于自定义片段的setter方法都不起作用,因为不会为任何框架创建的实例调用它们.


Eri*_*ric 2

可以将它们分别包装在一个布局中(例如 )LinearLayout,然后设置其大小和位置。这个答案是关于类似的问题,并展示了如何使用FrameLayout带有自定义布局参数的 来包含Fragment.

请注意,fragment在 XML 中使用对象时,可以使用android:layout_*属性来控制其位置。就像这样:

<LinearLayout
    android:orientation="horizontal"
    ... >

    <fragment
        android:layout_height="wrap_content"
        android:layout_width="0px"
        android:layout_weight="1"
        ... />

    <fragment
        android:layout_height="wrap_content"
        android:layout_width="0px"
        android:layout_weight="1"
        ... />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

但是,我认为不可能以编程方式将布局参数应用于FragmentsViewGroup毕竟他们不是。