2

如何以编程方式设置片段的高度、宽度、边距等参数。我正在添加片段,例如

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    MyListFragment myListFragment = new MyListFragment();
    fragmentTransaction.add(1, myListFragment);

    DetailFragment detailFragment = new DetailFragment();
    fragmentTransaction.add(1, detailFragment);

    fragmentTransaction.commit();

我也在使用像 android-support-v4.jar 这样的兼容 jar。

谢谢。

4

3 回答 3

7

如何以编程方式设置片段的高度、宽度、边距等参数

片段没有“高度、宽度、边距等参数”。ViewViewGroup具有“高度、宽度、边距等参数”。因此,您要么调整放置片段的容器(出于某种奇怪的原因,您已1在上面的示例中声明了该容器),要么View调整FragmentonCreateView().

于 2012-05-21T11:16:09.967 回答
0

CommonsWare 的附加信息表明您可以调整 onCreateView() 返回的视图,这让我想到了另一种方法:只需获取 Fragments 视图,然后调整它的 LayoutParams。

// use the appropriate LayoutParams type and appropriate size/behavior
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(left, top, right, bottom);
theFragment().getView().setLayoutParams(params);
于 2018-10-15T03:40:08.450 回答
0

我认为这里有一个有效的案例,可以在片段视图上以编程方式添加边距,而不是在它膨胀到的容器上。

例如,如果你想让你的容器布局与其他视图共享。

在我的例子中,我有一个FrameLayout在顶部包含一个按钮的全屏,然后整个屏幕被膨胀的片段占据。我可以将两个FrameLayouts 嵌套在另一个中,但这对绘制性能不利,更好的选择是将片段直接膨胀到 rootFrameLayout中,但view topMargin要防止它隐藏按钮。

这是一些代码:

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = new MyFragment();
fm.beginTransaction().add(R.id.container, fragment, "main").commit();

// wait for the fragment to inflate its view within container
container.addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        if (fragment.getView() != null) {
            LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
            lp.topMargin = 50; // you need to translate DP to PX here!
            fragment.getView().setLayoutParams(lp);

            container.removeOnLayoutChangeListener(this); // prevent infinite loops
        }
    }
});
于 2019-01-01T08:26:31.307 回答